//Algoritmo de matrices de G y H public bool algoritmoMatrices() { bool isomorficos = false,continua = true; int colG = 0, n = G.getListaAdyacencia().Count; CMatrizAdyacencia MG = G.getMatrizAdyacencia(); CMatrizAdyacencia MH = new CMatrizAdyacencia(n); MH.setMatriz(copiaMatriz(H.getMatrizAdyacencia().getMatriz(), n)); while (colG < n && continua) { if (encuentraSemejante(MG, ref MH, colG, n)) { if (matricesIguales(MG, MH, n)) { isomorficos = true; continua = false; } else colG++; } else continua = false; } if (colG == n || !matricesIguales(MG, MH,n))//Si se recorrieron todas las columnas de G { isomorficos = false; } return isomorficos; }
public bool encuentraSemejante(CMatrizAdyacencia m1, ref CMatrizAdyacencia m2, int col_m1, int n) { int ic2 = col_m1 + 1; bool semejante = false; if (ic2 == n) { ic2 = 0; } while (col_m1 != ic2) { if ((semejante = columnaYRenglonesIguales(m1, m2, col_m1, ic2, n))) { aplicarIntercambioDeFilasYColumnas(ref m2, col_m1, ic2, n); return(semejante); } ic2++; if (ic2 == n) { ic2 = 0; } } return(semejante); }
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 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 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; }
//Algoritmo de matrices de G y H public bool algoritmoMatrices() { bool isomorficos = false, continua = true; int colG = 0, n = G.getListaAdyacencia().Count; CMatrizAdyacencia MG = G.getMatrizAdyacencia(); CMatrizAdyacencia MH = new CMatrizAdyacencia(n); MH.setMatriz(copiaMatriz(H.getMatrizAdyacencia().getMatriz(), n)); while (colG < n && continua) { if (encuentraSemejante(MG, ref MH, colG, n)) { if (matricesIguales(MG, MH, n)) { isomorficos = true; continua = false; } else { colG++; } } else { continua = false; } } if (colG == n || !matricesIguales(MG, MH, n))//Si se recorrieron todas las columnas de G { isomorficos = false; } return(isomorficos); }
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 encuentraSemejante(CMatrizAdyacencia m1,ref CMatrizAdyacencia m2, int col_m1,int n) { int ic2 = col_m1 + 1; bool semejante = false; if (ic2 == n) ic2 = 0; while (col_m1 != ic2) { if ((semejante = columnaYRenglonesIguales(m1, m2, col_m1, ic2, n))) { aplicarIntercambioDeFilasYColumnas(ref m2, col_m1, ic2, n); return semejante; } ic2++; if (ic2 == n) ic2 = 0; } return semejante; }
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; }