微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

深度优先搜索 - 从图形的一个顶点到另一个顶点的返回路径包括不必要的顶点

如何解决深度优先搜索 - 从图形的一个顶点到另一个顶点的返回路径包括不必要的顶点

在 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 举报,一经查实,本站将立刻删除。