public MatrizDispersa MuliplyBy(MatrizDispersa matriz)
        {
            MatrizDispersa resultado = new MatrizDispersa();

            for (int c = 0; c < this.SizeX; c++)
            {
                PosicionMatriz posx = new PosicionMatriz(c);
                PosicionMatriz col  = (PosicionMatriz)resultado.columna.Add(posx);



                for (int f = 0; f < matriz.SizeY; f++)
                {
                    int total = 0;
                    for (int j = 0; j < this.SizeY; j++)
                    {
                        int res1 = GetValueAt(matriz, j, c);
                        int res2 = GetValueAt(this, c, j);
                        total += res1 * res2;
                    }
                    col.filas.Add(new PosicionMatriz(c, f, total.ToString()));
                }
            }
            return(resultado);
        }
        public void Print(MatrizDispersa matriz)
        {
            string nodes = "";

            PosicionMatriz it = (PosicionMatriz)matriz.columna.primero;

            do
            {
                nodes += $" subgraph col{it.posx}" + "{ \n rank=UD; \n";

                PosicionMatriz fila = (PosicionMatriz)it.filas.primero;

                do
                {
                    nodes += $"\n col{((PosicionMatriz)fila).posx}fil{((PosicionMatriz)fila).posy}[label={fila.valor}]";
                    nodes += $"\n col{((PosicionMatriz)fila).posx}fil{((PosicionMatriz)fila).posy}->col{((PosicionMatriz)fila.Siguiente).posx}fil{((PosicionMatriz)fila.Siguiente).posy}; ";

                    fila = (PosicionMatriz)fila.Siguiente;
                }while (fila != it.filas.primero);
                nodes += " } ";

                it = (PosicionMatriz)it.Siguiente;
            }while (it != matriz.columna.primero);
            string output = @"digraph dibujo{node[shape=box width=1];rank=LR; " + nodes + " }";

            Random random = new Random();
            int    i      = random.Next();

            string newstr       = i.ToString();
            string path         = $@"C:\EDD\PrimeraPractica\output\";
            string combinedPath = Path.Combine(path, $"graph{newstr}.dot");

            // This text is added only once to the file.
            if (!File.Exists(combinedPath))
            {
                // Create a file to write to.
                File.WriteAllText(combinedPath, output);
            }

            System.Diagnostics.Process          process   = new System.Diagnostics.Process();
            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo("dot.exe");
            startInfo.WindowStyle     = System.Diagnostics.ProcessWindowStyle.Hidden;
            startInfo.Arguments       = $@"-Tbmp {combinedPath} -o { Path.Combine(path, $"outfile{newstr}.bmp")}";
            startInfo.UseShellExecute = false;
            process.StartInfo         = startInfo;
            process.Start();
            process.WaitForExit();


            System.Diagnostics.Process.Start(Path.Combine(path, $"outfile{newstr}.bmp"));
        }
        public int GetValueAt(MatrizDispersa matriz, int x, int y)
        {
            PosicionMatriz colMz = (PosicionMatriz)matriz.columna.primero;

            do
            {
                if (colMz.posx == x)
                {
                    PosicionMatriz filaMz = (PosicionMatriz)colMz.filas.primero;
                    do
                    {
                        if (filaMz.posy == y)
                        {
                            return(Int32.Parse(filaMz.valor));
                        }

                        filaMz = (PosicionMatriz)filaMz.Siguiente;
                    } while (filaMz != colMz.filas.primero);
                }
                colMz = (PosicionMatriz)colMz.Siguiente;
            } while (colMz != matriz.columna.primero);
            return(0);
        }
        public MatrizDispersa(Matriz matriz)
        {
            SizeX = Int32.Parse(matriz.size_x);
            SizeY = Int32.Parse(matriz.size_y);

            for (int j = 0; j < SizeX; j++)
            {
                PosicionMatriz posx = new PosicionMatriz(j);
                PosicionMatriz col  = (PosicionMatriz)columna.Add(posx);
                for (int i = 0; i < SizeY; i++)
                {
                    PosicionMatriz posy = new PosicionMatriz(j, i, "0");
                    foreach (var dato in matriz.valores.valor)
                    {
                        if (Int32.Parse(dato.pos_x) == j && Int32.Parse(dato.pos_y) == i)
                        {
                            posy = new PosicionMatriz(j, i, dato.dato);
                        }
                    }

                    col.filas.Add(posy);
                }
            }
        }