Python:表示路径数量最少的路径

时间:2016-07-17 12:32:24

标签: python graph

Image for describing the test case of problem statement

我已经实现了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

2 个答案:

答案 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