Exemplo n.º 1
0
        /// <summary>
        /// Genera la permutacion, la compara con el grafo original.
        /// </summary>
        /// <param name="arry"></param>
        /// <param name="i"></param>
        /// <param name="n"></param>
        /// <param name="cont"></param>
        /// <param name="Grafo1"></param>
        /// <param name="Grafo2"></param>
        public static void permute(char[] arry, int i, int n, ref int cont, Carga Grafo1, Carga Grafo2, ref bool bandera)
        {
            int j;

            if (i == n)
            {
                int[,] varMatrizPermutada = MatrizPermutada(ObtenerArreglo(Grafo2.cantVertices), converToString(arry), n);
                int[,] Ptraspuesto        = comparar.Transpuesto(varMatrizPermutada, Grafo2.cantVertices);

                int[,] Permutacion_Semi_Final = comparar.Multiplicar(varMatrizPermutada, Grafo2.getVector(), Grafo2.cantVertices);

                int[,] PermutacionFinal = comparar.Multiplicar(Permutacion_Semi_Final, Ptraspuesto, Grafo2.cantVertices);



                if (comparar.Compare_Permutacion(PermutacionFinal, Grafo1.getVector(), Grafo1.cantVertices))
                {
                    Console.WriteLine("----------------------------------------------");
                    Console.WriteLine("No." + (cont + 1));
                    Console.WriteLine("La funcion de Isomorfismo es:");
                    Console.WriteLine("Grafo 1: " + ObtenerArreglo(Grafo1.cantVertices));
                    Console.WriteLine("Grafo 2: " + converToString(arry));
                    Console.WriteLine("----------------------------------------------");
                    Console.WriteLine(" ");
                    bandera = true;
                    cont++;
                    return;
                }

                //Console.WriteLine(arry);
            }
            else
            {
                for (j = i; j < n; j++)
                {
                    Cambio(ref arry[i], ref arry[j]);
                    permute(arry, i + 1, n, ref cont, Grafo1, Grafo2, ref bandera);
                    Cambio(ref arry[i], ref arry[j]);
                }
            }
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            bool seguir = true;

            do
            {
                Comparacion comparacion = new Comparacion();
                Carga       Grafo1      = new Carga();
                Carga       Grafo2      = new Carga();
                Utilidades  varios      = new Utilidades();
                bool        bandera     = false;
                bool        carga1      = true;
                bool        carga2      = true;

                while (carga1)
                {
                    Console.Clear();
                    Console.WriteLine("Ingrese direccion del archivo:");
                    string address = Console.ReadLine();
                    if (address.Contains(".txt"))
                    {
                        if (Grafo1.CargaryEjecutarDatosArchivo(address))
                        {
                            Console.ReadLine();
                            carga1 = false;
                        }
                        else
                        {
                            Console.WriteLine("Formato de archivo invalido.");
                            Console.ReadLine();
                        }
                    }
                    else
                    {
                        Console.WriteLine("Archivo invalido; vuelva a inte" +
                                          "ntarlo\nPresione Enter para continuar");
                        Console.ReadLine();
                    }
                }

                while (carga2)
                {
                    Console.Clear();
                    Console.WriteLine("Ingrese direccion del segundo archivo:");
                    string address2 = Console.ReadLine();
                    if (address2.Contains(".txt"))
                    {
                        if (Grafo2.CargaryEjecutarDatosArchivo(address2))
                        {
                            Console.ReadLine();
                            carga2 = false;
                        }
                        else
                        {
                            Console.WriteLine("Formato de archivo invalido.");
                            Console.ReadLine();
                        }
                    }
                    else
                    {
                        Console.WriteLine("Archivo invalido; vuelva a " +
                                          "intentarlo\nPresione Enter para continuar");
                        Console.ReadLine();
                    }
                }
                Console.Clear();

                Grafo1.calcGrado(Grafo1.aristasC, Grafo1.cantVertices);

                Grafo2.calcGrado(Grafo2.aristasC, Grafo2.cantVertices);

                Grafo1.calcAislados();
                Grafo2.calcAislados();

                Console.WriteLine("");

                if (Grafo1.cantVertices != Grafo2.cantVertices)
                {
                    Console.WriteLine();
                    Console.WriteLine("Los grafos no son isomorfos. No poseen la misma cantidad de vertices.");
                    Console.WriteLine("Cantidad vertices grafos 1 es: " + Grafo1.cantVertices);
                    Console.WriteLine("Cantidad vertices grafos 2 es: " + Grafo2.cantVertices);
                    Console.WriteLine();
                }
                else if (Grafo1.cantAristas != Grafo2.cantAristas)
                {
                    Console.WriteLine();
                    Console.WriteLine("Los grafos no son isomorfos. No poseen la misma cantidad de aristas.");
                    Console.WriteLine("Cantidad aristas grafos 1 es: " + Grafo1.cantAristas);
                    Console.WriteLine("Cantidad aristas grafos 2 es: " + Grafo2.cantAristas);
                    Console.WriteLine();
                }
                else if (Grafo1.calcCirEul() != Grafo2.calcCirEul())
                {
                    Console.WriteLine("Los grafos no son isomorfos, debido a que uno de los dos tiene circuito euleriano");
                }

                else if (Grafo1.calRerEul() != Grafo2.calRerEul())
                {
                    Console.WriteLine("Los grafos no son isomorfos, debido a que uno de los dos tiene recorrido euleriano");
                }

                else if (!comparacion.calcGraIgu(Grafo1.calcGrado(Grafo1.aristasC, Grafo1.cantVertices), Grafo1.calcGrado(Grafo1.aristasC, Grafo1.cantVertices)))
                {
                    Console.WriteLine("Los grafos no son isomorfos, debido a que los grados de los vertices no son iguales");
                }
                else
                {
                    int cont = 0;

                    Utilidades.permute(Utilidades.ObtenerArreglo(Grafo2.cantVertices).ToArray(), 0, Utilidades.ObtenerArreglo(Grafo2.cantVertices).ToArray().Length, ref cont, Grafo1, Grafo2, ref bandera);

                    if (!bandera)
                    {
                        Console.WriteLine("Los grafos no son isomorfos, debido a que no se encontro funcion");
                    }
                    Console.WriteLine("Terminado");
                }
                Console.ReadLine();
                Console.Clear();
                bool continuar = true;
                do
                {
                    Console.WriteLine("Desea comprobar otros grafos S/N  ?");
                    string respuesta = Console.ReadLine().ToLower();
                    switch (respuesta)
                    {
                    case "s":
                        continuar = false;
                        break;

                    case "n":
                        Console.Clear();
                        Console.WriteLine("Todos los derechos reservados (C). 2016\nHarry Caballeros\nDavid Munguia" +
                                          "\nSebastian Orantes\nSebastian Bonilla");
                        continuar = false;
                        seguir    = false;
                        break;

                    default:
                        Console.WriteLine("Ingreso una opcion invalida\n Presione " +
                                          "ENTER para continuar");
                        Console.ReadLine();
                        break;
                    }
                } while (continuar);



                Console.ReadLine();
            } while(seguir);
            // Instancia los objetos Comparacion, grafo1, grafo2 y varios
        }