当我再次计算路径为顶点C to M
正确的路径应该是
C -> B -> N -> M
但它是
A -> B -> N -> M
我使用了此代码Dijkstra Algorithm
这是我图表的图片:
答案 0 :(得分:0)
这是因为你首先为A调用函数compute然后为C调用它。像这样的字段:
public double minDistance = Double.POSITIVE_INFINITY;
public Vertex previous;
已有值,因此您需要删除A的路径计算或清除此值,您可以使用以下函数执行此操作:
public void clear() {
minDistance = Double.POSITIVE_INFINITY;
previous = null;
}
在这个顶点类中,并像这样调用它:
for (Vertex v : vertices) {
v.clear();
}
之前computePaths(v2);
here是您的代码的在线版本,您可以看到输出为:
Distance to B: 1.0
Path: [A, B]
Distance to M: 5.0
Path: [C, B, N, M]