这是一个家庭作业问题,我很乐意提供一些指导。
设G =(V,E)是无向图,其中每个顶点代表一个城市,边缘具有代表行进距离的权重。一些城市有加油站。一辆汽车从顶点开始,气罐足以行驶长度为L.我需要找到s和t之间的最短路径,以便汽车不会耗尽汽油。
我的主要想法是使用Floyd-Warshall算法进行一些更改。当我们计算shortestPath(i,j,0)时,如果我有一个加油站并且L-w(i,j)>,则我们分配w(i,j)。 0,否则为无穷大。但是,对于接下来的步骤,我不知道如何将当前燃料状态添加到计算中。
感谢。
答案 0 :(得分:3)
使用加油站制作带有顶点的新加权图:s
,t
和城市(C
)。
边缘:
s-c
与c
之间的最短路径长度为C
,则s
与c
<= L
,<{1}} LI>
c1-c2
,c1
,c2
来自C
,c1-c2 <= L
,c-t
,c
来自C
,长度为c-e <= L
,s-t
,如果长度为s-t <= L
。边缘权重设置为v1-v2
长度。
此图表上的标准Dijkstra应返回您在原始图表上寻找的最短路径的骨架。
可以迭代地创建新图表。当Dijkstra要求边界顶点上的边时。首先,创建s-c
和s-t
边(和顶点),如果需要c1-c2
和c-t
,则将这些顶点和边添加到图表中。