Dijkstra在Java源和目标中的算法

时间:2017-02-10 21:30:12

标签: java graph dijkstra

我正在尝试使用Dijkstra的算法来查找图中两个节点之间的最短路径。

如果找到源和目标之间的最短路径,我应该怎么做以下代码来停止计算?

public void calculate(Vertex source){
    // Algo:
    // 1. Take the unvisited node with minimum weight.
    // 2. Visit all its neighbours.
    // 3. Update the distances for all the neighbours (In the Priority Queue).
    // Repeat the process till all the connected nodes are visited.

    source.minDistance = 0;
    PriorityQueue<Vertex> queue = new PriorityQueue<Vertex>();
    queue.add(source);

    while(!queue.isEmpty()){

        Vertex u = queue.poll();

        for(Edge neighbour:u.neighbours){
            Double newDist = u.minDistance+neighbour.weight;

            if(neighbour.target.minDistance>newDist){
                // Remove the node from the queue to update the distance value.
                queue.remove(neighbour.target);
                neighbour.target.minDistance = newDist;

                // Take the path visited till now and add the new node.s
                neighbour.target.path = new LinkedList<Vertex>(u.path);
                neighbour.target.path.add(u);

                //Reenter the node with new distance.
                queue.add(neighbour.target);                    
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

  

我应该怎么做以下代码停止计算时   找到源和目标之间的最短路径

你不能在中间“破解”,因为在算法结束之前,你无法判断路径是否比你已经找到的路径短。