public Propiedades(List <CNodoVertice> lady, List <CArista> lari, CMatrizAdyacencia mady, CMatrizIncidencia mind, int na, int nv)
        {
            InitializeComponent();
            DataTable mat_ady = new DataTable();
            DataTable mat_inc = new DataTable();

            object[] values  = new object[lady.Count];
            object[] values2 = new object[lari.Count];

            int cont = 1;

            foreach (CNodoVertice cnv in lady)
            {
                mat_ady.Columns.Add("V" + cnv.getVertice().getId(), typeof(int));
            }

            foreach (CArista ar in lari)
            {
                mat_inc.Columns.Add("E" + cont.ToString(), typeof(int));
                cont++;
            }


            for (int i = 0; i < lady.Count; i++)
            {
                for (int j = 0; j < lady.Count; j++)
                {
                    values[j] = mady.getMatriz()[i, j];
                }

                mat_ady.Rows.Add(values);
            }

            for (int i = 0; i < lady.Count; i++)
            {
                for (int j = 0; j < lari.Count; j++)
                {
                    values2[j] = mind.getMatriz()[i, j];
                }

                mat_inc.Rows.Add(values2);
            }

            this.NAristasLabel.Text  += na.ToString();
            this.NVerticesLabel.Text += nv.ToString();

            DGMatrizA.DataSource = mat_ady;
            DGMatrizI.DataSource = mat_inc;
        }
        } //Valida matrices isomorficas

        public bool columnaYRenglonesIguales(CMatrizAdyacencia m1, CMatrizAdyacencia m2, int col_m1, int col_m2, int n)
        {
            bool       iguales = false;
            int        num_unos_columna_m1 = 0, num_unos_columna_m2 = 0;
            List <int> nuef_m1 = new List <int>();
            List <int> nuef_m2 = new List <int>();

            num_unos_columna_m1 = calculaUnosColumna(m1.getMatriz(), col_m1, n, ref nuef_m1);
            num_unos_columna_m2 = calculaUnosColumna(m2.getMatriz(), col_m2, n, ref nuef_m2);

            if (num_unos_columna_m1 == num_unos_columna_m2 && igualNuef(nuef_m1, nuef_m2))
            {
                iguales = true;
            }

            return(iguales);
        }
        public bool matricesIguales(CMatrizAdyacencia m1, CMatrizAdyacencia m2, int tam_mat)
        {
            bool band = true;

            for (int fila = 0; fila < tam_mat && band != false; fila++)
            {
                for (int columna = 0; columna < tam_mat; columna++)
                {
                    if (m1.getMatriz()[fila, columna] != m2.getMatriz()[fila, columna])
                    {
                        band = false;
                        break;
                    }
                }
            }

            return(band);
        } //Valida matrices isomorficas
        public Propiedades(List<CNodoVertice> lady,List<CArista> lari, CMatrizAdyacencia mady,CMatrizIncidencia mind,int na,int nv)
        {
            InitializeComponent();
            DataTable mat_ady = new DataTable();
            DataTable mat_inc = new DataTable();
            object[] values = new object[lady.Count];
            object[] values2 = new object[lari.Count];

            int cont = 1;

            foreach (CNodoVertice cnv in lady)
                mat_ady.Columns.Add("V" + cnv.getVertice().getId(), typeof(int));

            foreach (CArista ar in lari)
            {
                mat_inc.Columns.Add("E"+cont.ToString(), typeof(int));
                cont++;
            }

            for (int i = 0; i < lady.Count; i++)
            {
                for (int j = 0; j < lady.Count; j++)
                    values[j] = mady.getMatriz()[i, j];

                mat_ady.Rows.Add(values);
            }

            for (int i = 0; i < lady.Count; i++)
            {
                for (int j = 0; j < lari.Count; j++)
                    values2[j] = mind.getMatriz()[i, j];

                mat_inc.Rows.Add(values2);
            }

            this.NAristasLabel.Text += na.ToString();
            this.NVerticesLabel.Text += nv.ToString();

            DGMatrizA.DataSource = mat_ady;
            DGMatrizI.DataSource = mat_inc;
        }
        public void aplicarIntercambioDeFilasYColumnas(ref CMatrizAdyacencia m, int col_m1, int col_m2, int n)
        {
            int[,] maux = copiaMatriz(m.getMatriz(), n);

            //Cambio columnas
            for (int i = 0; i < n; i++)
            {
                m.getMatriz()[i, col_m1] = maux[i, col_m2];
                m.getMatriz()[i, col_m2] = maux[i, col_m1];
            }

            maux = copiaMatriz(m.getMatriz(), n);

            //Cambio renglones
            for (int i = 0; i < n; i++)
            {
                m.getMatriz()[col_m1, i] = maux[col_m2, i];
                m.getMatriz()[col_m2, i] = maux[col_m1, i];
            }
        }
        public void aplicarIntercambioDeFilasYColumnas(ref CMatrizAdyacencia m, int col_m1,int col_m2, int n)
        {
            int[,] maux = copiaMatriz(m.getMatriz(), n);

            //Cambio columnas
            for (int i = 0; i < n; i++)
            {
                m.getMatriz()[i, col_m1] = maux[i, col_m2];
                m.getMatriz()[i, col_m2] = maux[i, col_m1];
            }

            maux = copiaMatriz(m.getMatriz(), n);

            //Cambio renglones
            for (int i = 0; i < n; i++)
            {
                m.getMatriz()[col_m1, i] = maux[col_m2, i];
                m.getMatriz()[col_m2, i] = maux[col_m1, i];
            }
        }
        public bool matricesIguales(CMatrizAdyacencia m1, CMatrizAdyacencia m2,int tam_mat)
        {
            bool band = true;

            for (int fila = 0; fila < tam_mat && band !=  false; fila++)
            {
                for (int columna = 0; columna < tam_mat; columna++)
                {
                    if (m1.getMatriz()[fila, columna] != m2.getMatriz()[fila, columna])
                    {
                        band = false;
                        break;
                    }
                }
            }

            return band;
        }
        public bool columnaYRenglonesIguales(CMatrizAdyacencia m1, CMatrizAdyacencia m2, int col_m1, int col_m2, int n)
        {
            bool iguales = false;
            int num_unos_columna_m1 = 0, num_unos_columna_m2 = 0;
            List<int> nuef_m1 = new List<int>();
            List<int> nuef_m2 = new List<int>();

            num_unos_columna_m1 = calculaUnosColumna(m1.getMatriz(), col_m1, n, ref nuef_m1);
            num_unos_columna_m2 = calculaUnosColumna(m2.getMatriz(), col_m2, n, ref nuef_m2);

            if (num_unos_columna_m1 == num_unos_columna_m2 && igualNuef(nuef_m1,nuef_m2))
                iguales = true;

            return iguales;
        }