查找图表中可能发生变化的最短路径

时间:2017-12-30 15:51:58

标签: c# algorithm graph-algorithm dijkstra

我遇到了一个问题,我一直试图用dijkstra的算法解决这个问题。任务:我们有N个城市,M“边缘”。每个连接都有一个构建日期和时间。一些路线正在修改,但时间只在减少。

示例:

  

1780,1,3,50,b //在1780年,从1到3在50小时内,b - 建造,m -   改性

     1784年,1年,2年,30年,b

     

1784,2,3,10,b

     

1810,1,3,38,m

我正在寻找可能在不到40小时内连接1到3之间的日期。所以在1810年修改之前连接< 40小时不存在。结果是1810年。

关键是要知道是否有可能在不到X小时内从A市进入B市。所以我实现了dijkstra的算法 - 它很好但是边缘的每次修改都迫使我重新计算所有边缘。我几乎可以肯定存在更简单的方法。

1 个答案:

答案 0 :(得分:1)

Dijkstra的算法可以使用Min-Heap来实现,在这种情况下,它应该使用它来实现,因为它具有 减少键 操作将处理以下事项:

  

有些路线正在修改,但时间只在减少。

一旦理解了 min-heap ,就会知道你不需要重新计算所有边缘,一个简单的减少键操作及时 O(登录)就足够了。

一旦理解了 Min-Heap 数据结构,请转到此link以了解如何使用 Min-Heaps 实现Dijkstra,之后只有当成本降低时,才需要执行另外一项减少键操作。

我建议在进行实施之前仔细阅读链接。