Java 迪克斯特拉';s算法-如何返回路径中的边权重
我正在做一个用java实现Dijkstra最短路径算法的项目。我在我的程序中使用了此版本: 我的程序获取一个源代码并提供如下输出:Java 迪克斯特拉';s算法-如何返回路径中的边权重,java,algorithm,dijkstra,shortest-path,Java,Algorithm,Dijkstra,Shortest Path,我正在做一个用java实现Dijkstra最短路径算法的项目。我在我的程序中使用了此版本: 我的程序获取一个源代码并提供如下输出: Distance to PE Hall: 0.0 Path: [PE Hall] Distance to Reception: 1.0 Path: [PE Hall, Reception] Distance to Stairs: 3.0 Path: [PE Hall, Stairs] Distance to Refectory: 7.0 Path: [PE H
Distance to PE Hall: 0.0 Path: [PE Hall]
Distance to Reception: 1.0 Path: [PE Hall, Reception]
Distance to Stairs: 3.0 Path: [PE Hall, Stairs]
Distance to Refectory: 7.0 Path: [PE Hall, Stairs, Refectory]
我真正想要的是输出,以提供路径中每个节点之间的距离,例如:
Distance to Refectory: 7.0 Path: [PE Hall 0.0, Stairs 3.0, Refectory 4.0]
-
更新 我意识到程序通过在每个顶点中添加“previous vertex”变量来存储路径。 我的输出正是我想要的,但是,我的方法通过在路径上迭代返回的距离是不正确的
Target = E250 Distance = 0.0 {E250=0.0}
Target = D Distance = 10.0 {E250=0.0, D=10.0}
Target = C250Trans Distance = 35.0 {E250=0.0, C250Trans=10.0, D=10.0}
下面是我用来创建带有路径和每个点之间距离的arraylist的方法
public static ArrayList<String> getShortestPaths(Vertex target)
{
ArrayList<String> path = new ArrayList<String>();
for (Vertex vertex = target; vertex != null; vertex = vertex.previous)
{
path.add(vertex.name + "=" + vertex.getDistFromPrev());
}
Collections.reverse(path);
return path;
}
以下是供参考的距离矩阵:
E250-D=10
D-C250=25
如果有人能解释一下,为什么使用每个顶点的上一个
变量在路径上迭代会返回错误的边距离,这对我有很大帮助 您知道路径:
PE Hall, Stairs, Refectory
PE Hall: 0.0
Reception: 1.0
Stairs: 3.0
Refectory: 7.0
您还知道到路径中每个位置的距离:
PE Hall, Stairs, Refectory
PE Hall: 0.0
Reception: 1.0
Stairs: 3.0
Refectory: 7.0
Dijkstra的为您提供了所需的信息,您只需对其进行适当的“格式化”(例如,编写一个小的辅助函数,在Dijkstra完成后组合数据并调用您的辅助对象)。让
s
作为路径的起始顶点,d(v)
是顶点v
到顶点s
的距离,让e=w->v
成为路径的边。然后e
的长度是d(v)-d(w)
。在您的示例中,当更新到节点的距离时,边楼梯->反射体的长度为7.0-3.0=4.0
,同时记住“传入顶点”。所以你们可以从最新的顶点到起始顶点的距离。请有人帮我!!!