【问题标题】:My DFS can't handle simple graph [Python]我的 DFS 无法处理简单的图形 [Python]
【发布时间】:2019-03-22 19:05:22
【问题描述】:

下面是我的DFS[深度优先搜索]代码,我的代码可以处理复杂的图形,但不能像我给出的图形那样处理简单的图形,所以我的问题是如何工作出来?我正在这样做递归。 任何形式的帮助表示赞赏。

graph = { 'A' : ['B','S']}

def dfs(graph,start_node,visited):
    if start_node:
        if start_node not in visited:
            visited.append(start_node)
            for node in graph[start_node]:
                  dfs(graph,node,visited)
    else:
        return visited
    return visited

visited=dfs(graph,"A",[])
print(visited)

【问题讨论】:

    标签: python recursion microsoft-distributed-file-system


    【解决方案1】:

    您如何表示图表?如果它是作为标准图(具有 2 路边)表示为由节点键入的字典,其中值是相邻节点的列表,那么您的“图”根本不是图,因为它缺少 @ 的边列表987654321@ 和'S'。但是,您为什么将其用作测试用例?这种输入的唯一相关问题是您是否想测试您的代码是否在它们上优雅地失败(您的没有 - 但正确的错误处理与您的问题无关)。

    另一方面,如果这些是有向图,那么您的示例是有意义的(将值解释为对应于 outgoing 边,而键是具有输出边的节点)。但在这种情况下,您无法处理终端节点。您可以在递归之前显式检查一个节点是否在字典中,或者将终端节点的直接可访问节点列表视为隐式 [] 并在这些情况下使用字典 get() 方法返回它:

    def dfs(graph,start_node,visited):
        if start_node:
            if start_node not in visited:
                visited.append(start_node)
                for node in graph.get(start_node,[]):
                      dfs(graph,node,visited)
        else:
            return visited
        return visited
    

    这将按预期工作,打印['A', 'B', 'S']

    【讨论】:

    • 感谢您的回复,现在我明白了,非常感谢您的努力和时间,干杯。
    猜你喜欢
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 2023-03-29
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多