JAVA - 在加权图中找出两个节点之间的最短路径(也是负权重)

时间:2018-05-18 09:36:12

标签: java algorithm graph path bellman-ford

我需要一种算法来查找定义的源节点和定义的目标节点之间的最短路径。

输入文件如下所示:

0 6 1.4    

7 9       

0 1 3.2   
0 2 2.4   
0 3 1.7   
1 2 -2.1  
2 4 1.6   
3 4 1.8  
4 5 1.9  
4 6 1.7  
5 6 -3.1
  • 第一行代表:第一个数字是起始节点,第二个数字是目标  节点和第三个是我可能花费的最大重量

  • 第二行代表节点和弧的数量

  • 其他线代表弧的权重描述 //示例:从节点0到节点1,权重为3.2。

如果没有可能的路径成本低于1.4(如第一个输入行所示),程序必须返回值0.如果可能,则必须返回1.

我尝试使用Bellman-Ford算法,但它找到了到所有目的地的最短距离。

感谢任何建议

2 个答案:

答案 0 :(得分:0)

您可以应用Bellman-Ford算法并检查到目标节点的最短路径是否具有与结果中指定的路径相同或更重的权重。

Say results是在图上指定起始节点src的Bellman-Ford应用程序返回的List对象,其中results.get(tgt)返回节点{{1}之间的最短路径权重}和src。 假设tgt是您希望最短路径权重的最大权重。

你可以这样做:

maxWeight

答案 1 :(得分:-1)

只需使用Bellan-Ford。在任何情况下,您都无法解决两个节点之间的最短路径,而无需解决单一源最短路径。因此,只需检查 d [source_node]> max_weight (其中 d [i] 是到节点 i 的距离数组。 由于你可能使用了一个adjmatrix,所以在bellman ford你应该在图的边缘迭代n-1次。正如我今天早上告诉你的,在我们的skype对话之后,我找到了解决方案(仍然没有编译,对不起Menez)