/// <summary> /// Obtiene cada caracter de la cadena y según el ID así ingresa los vertices /// a una lista /// </summary> /// <param name="permutacion"></param> public void agregarListaProb(string permutacion, List <Vertice> vertices1, Matriz matrizAdyacencia1, Matriz matrizAdyacencia2, ref bool encuentraRelacion, ref List <funcion> listaFunciones) { for (int i = 0; i < permutacion.Length; i++) { for (int j = 0; j < listaVertices.Count; j++) { if ((int)permutacion[i] == listaVertices[j].ID) { // Si el ID de la cadena es igual al ID de un vertice se agrega // ese vertice al array numeros.Add(listaVertices[j]); break; } } } List <Vertice> vertices2 = new List <Vertice>(numeros); if (vertices1.Count > 9) { // En caso de que la cantidad de vértices sea mayor a nueve, solo se // genera una función de isomorfismo. Matriz posibleMatriz = OperacionesMatriz.generarMatrizPosible(vertices1, vertices2); if (Isomorfismo.gradosListasCoinciden(vertices1, vertices2) && // Es verdadero si paras el producto de // (posibleMatriz)*(matrizAdyacencia2)*(matryzAdyacencia2Transpuesta) // se genera la matriz de adyacencia del primer grafo. matrizAdyacencia1.equivalent(OperacionesMatriz.multiplicar( posibleMatriz, matrizAdyacencia2, OperacionesMatriz.transpose( posibleMatriz)))) { encuentraRelacion = true; funcion f = new funcion(); f.V1 = vertices1; f.V2 = vertices2; listaFunciones.Add(f); funcionIsomorfica = listaFunciones; } } else { listasProbabilidades.Add(vertices2); } }
/// <summary> /// Comprueba isomorfismo entre los dos grafos cargados /// </summary> private void btnComprobar_Click(object sender, EventArgs e) { if (!Isomorfismo.comprobarIsomorfismo(g1, g2, pbLoading, cbFunciones, ref listaFunciones)) { MessageBox.Show("Los grafos no son isomorfos.", "Resultado", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { cbFunciones.Enabled = true; dgvMostrarFuncion.Enabled = true; MessageBox.Show("Los grafos son isomorfos.", "Resultado", MessageBoxButtons.OK, MessageBoxIcon.Information); btnGenerarPdf.Enabled = true; } btnComprobar.Enabled = false; }