Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 2
0
 /// <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;
 }