python find path代码
图大概是如下这个样子(好丑),然后找路径
代码如下:
graph = {'A': ['B', 'C'],
'B': ['C', 'D'],
'C': ['D'],
'D': ['C'],
'E': ['F'],
'F': ['C']}
def find_path(graph, start, end, path=[]):
path = path + [start]
if start == end:
return path
if start not in graph:
return None
for node in graph[start]:
if node not in path:
newpath = find_path(graph, node, end, path)
if newpath: return newpath
return None
假如我们想找从A-D的路径,那么一开始start=A, end=D
- path = path + start = [] + A = [ A ],A的node中有B,C,所以先从B开始,因为B不在path中,所以调用自身find_path(graph,B,D,path)
- path = path + start = [ A ] + B = [ A, B ],B的node中有C,D,所以先从C开始,因为C不在path中,所以调用自身find_path(graph,C,D,path)
- path = path + start = [ A, B ] + C = [ A, B, C],C的node中有D,所以从D开始,因为D不在path中,所以调用自身find_path(graph,D,D,path)
- path = path + start = [ A, B, C ] + D = [ A, B, C, D],因为D=D,到达终点,return path [ A, B, C, D].
如果图的顺序有所改变:
graph = {'A': ['C', 'B'],
'B': ['C', 'D'],
'C': ['D'],
'D': ['C'],
'E': ['F'],
'F': ['C']}
那么,用上述函数的结果则是 A-C-D.