Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:用最少路径数表示路径的图形_Python_Graph - Fatal编程技术网

Python:用最少路径数表示路径的图形

Python:用最少路径数表示路径的图形,python,graph,Python,Graph,我已经实现并修改了它。对于给定的图,如果需要得到从A到F的最短路径 A--(R2,R4)-->M--(R2,R4)-->N--(R3)-->L--(R3)-->F 对于修改后的代码或其他方式,我感兴趣的是最少的路由数,所以在这种情况下,直接路由R1输出应该是 A--(R1)-->B--(R1)-->C--(R1)-->D--(R1)-->E--(R1)-->F 有人能建议我们怎么才能做到这一点吗。假设路线之间的距离相同。这是我的代码。 您可以修改图形,使路线上的每个早期顶点都有一条边,可以连接到

我已经实现并修改了它。对于给定的图,如果需要得到从A到F的最短路径

A--(R2,R4)-->M--(R2,R4)-->N--(R3)-->L--(R3)-->F

对于修改后的代码或其他方式,我感兴趣的是最少的路由数,所以在这种情况下,直接路由R1输出应该是

A--(R1)-->B--(R1)-->C--(R1)-->D--(R1)-->E--(R1)-->F

有人能建议我们怎么才能做到这一点吗。假设路线之间的距离相同。这是我的代码。

您可以修改图形,使路线上的每个早期顶点都有一条边,可以连接到后面的顶点(更改链接代码中的第49-51行):

这将产生:

For  A to F  : > 
(('A', 'F'), ['R1'])
For  A to F  : > 
(('A', 'B'), ['R1'])
(('B', 'C'), ['R1'])
(('C', 'D'), ['R1'])
(('D', 'E'), ['R1'])
(('E', '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', 'F'), ['R1'])
For  A to F  : > 
(('A', 'B'), ['R1'])
(('B', 'C'), ['R1'])
(('C', 'D'), ['R1'])
(('D', 'E'), ['R1'])
(('E', 'F'), ['R1'])

可以将多条边替换为一条权重边,权重为边数。

然后在上面做Dijkstra算法。在您的示例中,所需路径的图权重将为5,而未加权图上Dijkstra算法返回的路径将为6

我不理解您的问题。这幅画不是图表。你能定义你所说的路径和路线是什么意思吗?路径就是这里的路线,R1:[A,B,C,D,E,F]是一条路径。路径和路线是相同的。假设它们是公交专用线路上的公共汽车站。ThanksAlso请看一下为上面的图运行的代码,查找a到F之间的路径Thankse