def searchPath(graph, start, end): '传入字典、开始节点(假如A)、结束节点(假如D)
results = [] ‘赋值空列表
__generatePath(graph, [start], end, results) ’调用函数,A到D的所有路径
results.sort(key = lambda x:len(x)) ‘按照长度进行排序,最短的路径就是我们需要的
return results ’返回排序后的所有结果
def __generatePath(graph, path, end, results):
current = path[-1] ‘列表最后一个元素赋值给current,这时为A
if current == end: ’判断最后一个元素是否为D
results.append(path) ‘如果为D则把路径列表添加到result列表内
else: ’最后一个元素不为D
for n in graph[current]: ‘在‘A'关键字对应的值进行查找,A关键对应['B', 'C', 'D']
if n not in path: ’如果查到的值(B,C,D)没在path列表内
#path.append(n)
__generatePath(graph, path + [n], end, results) ’path列表添加B的同时递归调用函数。
def showPath(results):
print('The path from ',results[0][0], ' to ', results[0][-1], ' is:')
for path in results:
print(path)
if __name__ == '__main__':
graph = {'A':['B', 'C', 'D'],
'B':['E'],
'C':['D', 'F'],
'D':['B', 'E', 'G'],
'E':['D'],
'F':['D', 'G'],
'G':['E']}
r1=searchPath(graph,"A","D")
showPath(r1)
The path from A to D is:
['A', 'D']
['A', 'C', 'D']
['A', 'B', 'E', 'D']
['A', 'C', 'F', 'D']
['A', 'C', 'F', 'G', 'E', 'D']