最短的路径与油箱

时间:2013-05-21 20:08:15

标签: graph-theory dynamic-programming

这是一个家庭作业问题,我很乐意提供一些指导。

设G =(V,E)是无向图,其中每个顶点代表一个城市,边缘具有代表行进距离的权重。一些城市有加油站。一辆汽车从顶点开始,气罐足以行驶长度为L.我需要找到s和t之间的最短路径,以便汽车不会耗尽汽油。

我的主要想法是使用Floyd-Warshall算法进行一些更改。当我们计算shortestPath(i,j,0)时,如果我有一个加油站并且L-w(i,j)>,则我们分配w(i,j)。 0,否则为无穷大。但是,对于接下来的步骤,我不知道如何将当前燃料状态添加到计算中。

感谢。

1 个答案:

答案 0 :(得分:3)

使用加油站制作带有顶点的新加权图:st和城市(C)。

边缘:

    如果s-cc之间的最短路径长度为C,则
  • sc <= L,<{1}} LI>
  • c1-c2c1c2来自Cc1-c2 <= L
  • c-tc来自C,长度为c-e <= L
  • s-t,如果长度为s-t <= L

边缘权重设置为v1-v2长度。

此图表上的标准Dijkstra应返回您在原始图表上寻找的最短路径的骨架。

可以迭代地创建新图表。当Dijkstra要求边界顶点上的边时。首先,创建s-cs-t边(和顶点),如果需要c1-c2c-t,则将这些顶点和边添加到图表中。