public string BusquedaHeuristica(string eOrigen, string eDestino, Grafoheurustico grafo) { List <string> conocidos = new List <string>(); List <Nodoh> vecinos = new List <Nodoh>(); string direccion = ""; // Direcciones int costoAcum = 0; // Acumula el costo de camino string solucion = ""; int costoCamino = 0; string nodo = eOrigen;// Origen direccion = nodo; if (nodo == eDestino) { solucion = direccion + nodo; } else { do { vecinos = grafo.ObtenerVecinos(nodo, conocidos);//sin explorar foreach (var vecino in vecinos) { if (vecino.Estado == eDestino) { solucion += direccion + "," + vecino.Estado + "\nCosto: " + costoCamino.ToString(); break; } } if (solucion == "") { NodoCosto menor = grafo.ObtenerVecinoMenorCosto(nodo, costoAcum, conocidos); costoAcum += menor.ArcCosto; direccion += "," + menor.Nodo; conocidos.Add(nodo); costoCamino = menor.Costo; nodo = menor.Nodo; vecinos = grafo.ObtenerVecinos(nodo, conocidos); } }while (solucion == ""); } return(solucion); }
static void Main(string[] args) { //Cola cola1 = new Cola(); //cola1.Insertar("A"); //cola1.Insertar("B"); //cola1.Insertar("C"); //cola1.Imprimir(); //Console.WriteLine("Extraemos uno de la cola:" + cola1.Extraer()); //cola1.Imprimir(); //Console.ReadKey(); Cola nodito = new Cola(); //nodito.Insertar("A", "B", "C", "D"); //nodito.Insertar("B", "E", "F"); //nodito.Insertar("C","G"); //nodito.Insertar("D","H"); //nodito.Insertar("H", "I"); //nodito.Insertar("F", "J"); //nodito.Imprimir(); #region Busqueda por anchura Console.WriteLine(Environment.NewLine + "Ingrese nodo objetivo"); //metodo nro 1: //Console.WriteLine(nodito.verificadorderutasporanchura("A", "F")); //nodito.mostrarelmentosdeunalista(); //Console.ReadKey(); //metodo nro2: //Console.WriteLine(nodito.BusquedaEnAncho("A", "H")); //Console.ReadKey(); #endregion #region Busqueda por profundidad ////Console.WriteLine(Environment.NewLine + "Ingrese nodo objetivo"); ////metodo nro1: //Console.WriteLine(nodito.verificadorderutasporprofundidad("A", "J")); //nodito.mostrarelmentosdeunalista(); //Console.ReadKey(); ////metodo nro 2: ////Console.WriteLine(nodito.BusquedaEnProfundidad("A", "G")); ////Console.ReadKey(); #endregion #region BUSQUEDA A* Grafoheurustico paises = new Grafoheurustico(); //incializacion paises.NuevoNodo("COLOMBIA", 120); paises.NuevoNodo("BOLIVIA", 90); paises.NuevoNodo("ECUADOR", 118); paises.NuevoNodo("CHILE", 145); paises.NuevoNodo("BRASIL", 194); paises.NuevoNodo("PANAMA", 48); paises.NuevoNodo("PERU", 93); paises.NuevoNodo("URUGUAY", 78); paises.NuevoNodo("PARAGUAY", 240); paises.NuevoNodo("COSTA RICA", 177); paises.NuevoNodo("EUU", 0); //enlaces paises.AgregarArco("COLOMBIA", "BOLIVIA", 4); paises.AgregarArco("COLOMBIA", "PANAMA", 11); paises.AgregarArco("COLOMBIA", "ECUADOR", 3); paises.AgregarArco("BOLIVIA", "BRASIL", 7); paises.AgregarArco("BOLIVIA", "COLOMBIA", 4); paises.AgregarArco("ECUADOR", "COLOMBIA", 3); paises.AgregarArco("ECUADOR", "CHILE", 8); paises.AgregarArco("BRASIL", "BOLIVIA", 7); paises.AgregarArco("BRASIL", "PANAMA", 9); paises.AgregarArco("PANAMA", "COLOMBIA", 11); paises.AgregarArco("PANAMA", "BRASIL", 9); paises.AgregarArco("PANAMA", "URUGUAY", 8); paises.AgregarArco("PANAMA", "PARAGUAY", 5); paises.AgregarArco("CHILE", "ECUADOR", 8); paises.AgregarArco("CHILE", "PERU", 2); paises.AgregarArco("PERU", "CHILE", 2); paises.AgregarArco("PERU", "PARAGUAY", 8); paises.AgregarArco("PERU", "COSTA RICA", 15); paises.AgregarArco("PARAGUAY", "PANAMA", 5); paises.AgregarArco("PARAGUAY", "PERU", 8); paises.AgregarArco("PARAGUAY", "COSTA RICA", 12); paises.AgregarArco("URUGUAY", "PANAMA", 6); paises.AgregarArco("URUGUAY", "EUU", 20); paises.AgregarArco("COSTA RICA", "PARAGUAY", 12); paises.AgregarArco("COSTA RICA", "PERU", 15); paises.AgregarArco("COSTA RICA", "EUU", 7); paises.AgregarArco("EUU", "URUGUAY", 20); paises.AgregarArco("EUU", "COSTA RICA", 7); //busqueda Console.WriteLine(nodito.BusquedaHeuristica("COLOMBIA", "EUU", paises)); Console.ReadLine(); #endregion }