Beispiel #1
0
        public NodoCosto ObtenerVecinoMenorCosto(string estado, int acum, List <string> explorados)
        {
            List <NodoCosto> costos = getVecinosCosto(estado, acum, explorados);
            NodoCosto        minimo = new NodoCosto();

            minimo.Costo = costos[0].Costo;
            foreach (var costo in costos)
            {
                if (costo.Costo < minimo.Costo)
                {
                    minimo = costo;
                }
            }
            return(minimo);
        }
Beispiel #2
0
        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);
        }