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!没什么可道歉的,帮了我大忙!