如何解决深度优先搜索 - 从图形的一个顶点到另一个顶点的返回路径包括不必要的顶点
在 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) 执行一些“手波浪形”操作,以找到图中两个顶点之间的路径。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。