我正在尝试使用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);
}
}
}
}
答案 0 :(得分:0)
我应该怎么做以下代码停止计算时 找到源和目标之间的最短路径
你不能在中间“破解”,因为在算法结束之前,你无法判断路径是否比你已经找到的路径短。