Tengo que hacer un programa de búsqueda desinformado (Breadth-first-Search) que toma dos nodos y devuelve todas las rutas entre ellos.Todas las rutas entre 2 nodos en el gráfico
public void BFS(Nod start, Nod end) {
Queue<Nod> queue = new Queue<Nod>();
queue.Enqueue(start);
while (queue.Count != 0)
{
Nod u = queue.Dequeue();
if (u == end) break;
else
{
u.data = "Visited";
foreach (Edge edge in u.getChildren())
{
if (edge.getEnd().data == "")
{
edge.getEnd().data = "Visited";
if (edge.getEnd() != end)
{
edge.getEnd().setParent(u);
}
else
{
edge.getEnd().setParent(u);
cost = 0;
PrintPath(edge.getEnd(), true);
edge.getEnd().data = "";
//return;
}
}
queue.Enqueue(edge.getEnd());
}
}
}
}
Mi problema es que solo me dan dos caminos en lugar de todos y yo no sé qué para editar en mi código para llegar a todos ellos. La entrada de mi problema se basa en este mapa:
¿El gráfico no está dirigido (de la imagen se supone que es)? Si es así, creo que debes buscar alguna programación dinámica, porque muchas de las rutas compartirán algunas subrutas. Solo para saber, ¿por qué quieres todos los caminos posibles? – aweis
El gráfico en no dirigido. Necesito pasar por nodos usando el orden BFS. Quiero todas las posibilidades para encontrar el que tenga el costo mínimo con la búsqueda desinformada. –
¿Está buscando * todas las rutas *? o * todos los caminos más cortos *? ¿Por qué 'rompes' cuando encuentras el objetivo? Puede haber otra solución esperando a ser descubierta ... Además, ¿tiene que ser BFS? I * think * algo así como Iterative-Deepening DFS será mucho más fácil de implementar para encontrar todos los caminos más cortos ... pero podría ser solo yo: \ – amit