我已经实现了Dijkstra's Algorithm并修改了它。对于给定的图形如果需要从A到F获得最短路径
< - >(R2,R4) - > M - (R2,R4) - > N - (R3) - > L - (R3) - > F
使用修改后的代码或其他方式我感兴趣的是最小路由数,所以在这种情况下直接路由R1输出应该是
A - (R1) - > B - (R1) - > C - (R1) - > D - (R1) - > E - (R1) - > F
有人可以建议我们如何才能做到这一点。假设路线之间的距离相同。这是我的代码。 Fiddle Code for minimum routes
答案 0 :(得分:1)
您可以修改图形,以便路径上的每个早期顶点都有一条边到后一条(在链接代码中更改第49-51行):
for route,path in routes.iteritems():
for i in range(len( path)-1):
for j in range(i, len(path)):
data.append( (path[i] , path[j] , 1 , route))
输出:
For A to F : >
(('A', 'F'), ['R1'])
如果您希望扩展路线,可以将打印代码修改为:
print "For A to F : > "
for (s,d),r in find_shortest_path("A","F"):
b = False
for i in range(len(routes[r[0]])):
v = routes[r[0]][i]
if v == s:
b = True
elif v == d:
break
if b:
print((v, routes[r[0]][i+1]), r)
那产出:
For A to F : >
(('A', 'B'), ['R1'])
(('B', 'C'), ['R1'])
(('C', 'D'), ['R1'])
(('D', 'E'), ['R1'])
(('E', 'F'), ['R1'])
答案 1 :(得分:0)
您可以使用一个重量边缘替换多边,重量是边数。
然后在上面做Dijkstra算法。在您的示例中,所需路径的图表权重将为5 ,而未加权图表返回的Dijkstra算法的路径将为6 。