J'ai implémenté un algorithme de traversée de graphe qui trouve un chemin entre deux noeuds dans le graphe. Le problème est qu'il ne trouve un chemin pour certaines requêtes quand je sais qu'il ya un chemin entre chaque nœudProblème avec la traversée de graphe
public List getDirectRoute(Node start, Node end)
{
//Uses Dijkstras
List<Node> vis = new LinkedList<Node>();
Map<Node,Node> prev = new HashMap<Node,Node>(); // Records the previous Node
List<Node> route = new LinkedList<Node>(); //Will hold the final route
Queue<Node> queue = new LinkedList<Node>(); // Used for the algorithm
Node current = start;
queue.add(current);
vis.add(current);
while(!queue.isEmpty())
{
current = queue.remove();
if(current.equals(end))
{
break;
}else
{
for(Node node : successors(current))
{
if(node.equals(vertices.get(0)))
{
continue;
}
if(!vis.contains(node))
{
queue.add(node);
vis.add(node);
prev.put(node, current);
}
}
}
}
if (!current.equals(end))
{
System.out.println("No route available");
}
for(Node node = end; node != null; node = prev.get(node))
{
route.add(node);
}
return route;
}
Suis-je manque quelque chose dans l'algorithme? J'ai exécuté le débogueur et mais je ne peux pas trouver le problème
Pouvez-vous ajouter une brève explication de votre algorithme utilisé ici? –
Qu'est-ce que 'vertices'? Que font les successeurs (Node) '? Vous semblez avoir des données globales que vous ne liez pas. Comment encodes-tu le graphique en tant qu'objets? –
@matt b +1, nous avons besoin du reste du code pour le comprendre. – andersoj