问题描述
在 Kent D. Lee 的教科书 Data Structures and Algorithms with Python 中,使用深度优先搜索存在一个问题。根据这本书,我必须:
编写一个程序,在图 7.9 所示的图中找到顶点 9 和 29 之间的路径。一定要打印两个顶点之间的路径中必须经过的路径(即顶点的序列)。
代码如下:
def graphDFS(G,start,goal):
def adjacent(current,edges):
adj_list = []
for e in edges:
if current == e[0]:
adj_list.append(e[1])
return adj_list
stack = []
visited = set()
path = []
stack.append(start)
while not len(stack) == 0:
current = stack.pop()
visited.add(current)
path.append(current)
if current == goal:
return path
# return True # or return path to goal perhaps
for v in adjacent(current,G[1]):
if v not in visited:
stack.append(v)
return []
此处给出了指向有向图图像的链接:(See Fig. 9 for the graph)
我目前拥有的路径是 [9,3,2,8,13,16,17,6,24,27,29]
。但是,当我最后检查结果时,除了 6 之外的整个路径都很好。我的猜测是它与使用的堆栈有关。有人知道我的代码有什么问题吗?
谢谢! :D
解决方法
有很多方法可以解决这个问题。对于其中之一,您可以运行 BFS 而不是 DFS,或者您可以使用不相交联合集 (DSU) 执行一些“手波浪形”操作,以找到图中两个顶点之间的路径。