2013-04-28 5 views
2

J'utilise actuellement l'algorithme de Dijkstra pour trouver le plus court chemin. Cet algorithme me donne le meilleur chemin le plus court mais je veux avoir 2 chemins ou plus. Comment puis-je atteindre cet objectif?multiples chemins les plus courts en utilisant Dijkstra

algorithme est le suivant:

public class Dijkstra 
{ 
    public static void computePaths(Vertex source) 
    { 
     source.minDistance = 0.; 
     PriorityQueue<Vertex> vertexQueue = new PriorityQueue<Vertex>(); 
    vertexQueue.add(source); 

    while (!vertexQueue.isEmpty()) { 
     Vertex u = vertexQueue.poll(); 

      // Visit each edge exiting u 
      for (Edge e : u.adjacencies) 
      { 
       Vertex v = e.target; 
       double weight = e.weight; 
       double distanceThroughU = u.minDistance + weight; 
     if (distanceThroughU < v.minDistance) { 
      vertexQueue.remove(v); 

      v.minDistance = distanceThroughU ; 
      v.previous = u; 
      vertexQueue.add(v); 
     } 
      } 
     } 
    } 
+1

que voulez-vous dire par 2 ou plus par an ça? Si le chemin le plus court a une longueur 'x', voulez-vous * tous * chemins de longueur' x'? Ou voulez-vous les 2 chemins les plus courts (où le second pourrait être '> x')? –

+1

https://code.google.com/p/k-shortest-paths/ –

+1

http://en.wikipedia.org/wiki/K_shortest_path_routing –

Répondre

Questions connexes