Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 迪克斯特拉';s算法-如何返回路径中的边权重_Java_Algorithm_Dijkstra_Shortest Path - Fatal编程技术网

Java 迪克斯特拉';s算法-如何返回路径中的边权重

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

我正在做一个用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 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

,同时记住“传入顶点”。所以你们可以从最新的顶点到起始顶点的距离。请有人帮我!!!