Python 当找到图的目标顶点时,如何停止深度优先搜索?

Python 当找到图的目标顶点时,如何停止深度优先搜索?,python,graph,depth-first-search,Python,Graph,Depth First Search,以下是图表: g = { 0: [2, 5, 7], 1: [7], 2: [0, 6], 3: [5, 4], 4: [3, 6, 7], 5: [3, 4, 0], 6: [2, 4], 7: [0, 1, 4] } 我在Python中有以下函数: def dfs(graph, start, target, visited=None): if visited is None: visited = se

以下是图表:

g = {
    0: [2, 5, 7],
    1: [7],
    2: [0, 6],
    3: [5, 4],
    4: [3, 6, 7],
    5: [3, 4, 0],
    6: [2, 4],
    7: [0, 1, 4]
}

我在Python中有以下函数:

def dfs(graph, start, target, visited=None):
    if visited is None:
        visited = set()
    visited.add(start)

    for n in (set( graph[start] ) - visited):
        dfs(graph, n, target, visited)
    return visited
但它会返回图中存在的所有顶点,如果目标顶点存在于图中,我希望它只返回目标顶点。
有人能帮我吗?

您想测试是否达到目标,如果达到目标,
返回True
。这可以通过对代码进行以下编辑来实现:

为提高效率而进行的小型编辑

def dfs(graph, start, target, visited=None):
    if visited is None:
        visited = set()
    visited.add(start)

    for n in (set( graph[start] ) - visited):
        if n == target:
            return True
        return dfs(graph, n, target, visited)
    return False
编辑:我的算法出错,修正版本如下:

def dfs(graph, start, target, visited=None):
    if start == target:
        return True
    if visited is None:
        visited = set()
    visited.add(start)

    found = False
    for n in (set( graph[start] ) - visited):
        if target == n:
            return True
        found = dfs(graph, n, target, visited)
    return found

你甚至没有检查目标是否找到……它只返回False。如果找到,它返回
True
,如果没有,它返回
False
。不是所有顶点,我将编辑问题并包括我正在使用的图。当我搜索顶点7或1时,代码不返回True,返回False,但对于其他顶点,它返回True!没什么可道歉的,帮了我大忙!