Devo eseguire un programma di ricerca non esaustivo (Breadth-first-Search) che prende due nodi e restituisce tutti i percorsi tra di loro.Tutti i percorsi tra 2 nodi nel grafico
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());
}
}
}
}
mio problema è che ho solo due percorsi invece di tutti e io non so cosa modificare nel mio codice per farli tutti. L'input del mio problema si basa su questa mappa:
Il grafico non è diretto (dall'immagine si assume che sia)? Se lo è, penso che sia necessario esaminare alcune programmazioni dinamiche, poiché molti percorsi condivideranno alcuni sotto-percorsi. Solo per sapere, perché vuoi tutti i percorsi possibili? – aweis
Il grafico non diretto. Devo passare attraverso i nodi usando l'ordine BFS. Voglio tutte le possibilità per trovare quello con il costo minimo con la ricerca non informato. –
Stai cercando * tutti i percorsi *? o * tutti i percorsi più brevi *? Perché ti "spezzi" quando trovi il bersaglio? Potrebbe esserci un'altra soluzione in attesa di essere scoperta ... Inoltre, deve essere BFS? I * think * qualcosa come Iterative-Deepening DFS sarà molto più facile da implementare per trovare tutti i percorsi più brevi ... ma quello potrebbe essere solo io: \ – amit