如何解决为什么在深度优先搜索时我的 for 循环没有中断
我正在用 python 进行深度优先搜索。要做到这一点,有一个带有一些值的 graph
,我必须显示路径,在给定的初始位置,到达最终目的地
visited = set()
def dfs(visited,graph,initial,final):
if initial not in visited:
print (initial)
visited.add(initial)
for neighbour in graph[initial]:
if(final == initial):
print("a")
break
dfs(visited,neighbour,final)
return visited
dfs(visited,'arad','lugoj')
问题在于 for 里面的 if。当我的 final
位置等于当前位置(这意味着我到达我的目的地)时,我想打破它,并返回一个包含到达它的路径的列表。但它不会中断也不会返回任何东西,控制台中显示的唯一值是方法内部的打印。这是控制台:
arad
timisoara
lugoj
a
sibiu
oradea
zerind
rimnicu vilcea
craiova
pitesti
bucharest
fagaras
giurgiu
urziceni
vaslui
lasi
neamt
hirsova
eforie
dobreta
mehadia
如你所见,它必须在 'a' 中打断。
我该如何处理?
##更新
{'timisoara','pitesti','eforie','lasi','craiova','mehadia','urziceni','lugoj','neamt','dobreta','zerind','giurgiu','rimnicu vilcea','bucharest','fagaras','sibiu','vaslui','hirsova','oradea'}
图表
#DEPTH_FirsT_SEARCH
graph = {
'oradea' : ['zerind','sibiu'],'zerind' : ['arad','oradea'],'arad' : ['timisoara','zerind'],'timisoara' : ['lugoj','arad'],'lugoj' : ['mehadia','timisoara'],'mehadia' : ['dobreta','lugoj'],'dobreta' : ['craiova','mehadia'],'craiova' : ['pitesti','dobreta'],'rimnicu vilcea' : ['craiova',],'sibiu' : ['oradea','fagaras'],'fagaras' : ['sibiu','bucharest'],'pitesti' : ['rimnicu vilcea','bucharest' : ['fagaras','urziceni'],'giurgiu' : ['bucharest'],'urziceni' : ['bucharest','hirsova'],'vaslui' : ['lasi','lasi' : ['neamt','vaslui'],'hirsova' : ['urziceni','eforie'],'eforie' : ['hirsova'],'neamt' : ['lasi']
}
解决方法
问题是你只在递归调用中跳出循环,而不是调用者。
由于您在适当的位置修改了 visited
,因此无需返回它。
相反,您可以返回一个布尔值,指示是否找到了 final
,并且调用者也可以跳出循环。
此外,final
和 initial
在循环期间不会改变,因此无需在那里比较它们。在循环之前做。
def dfs(visited,graph,initial,final):
if initial not in visited:
print (initial)
visited.add(initial)
if(final == initial):
print("a")
return True
for neighbour in graph[initial]:
if dfs(visited,neighbour,final):
return True
return False
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。