【发布时间】:2022-11-10 12:07:27
【问题描述】:
我正在尝试增强典型的 BFS 算法以返回它找到的路径的长度。这是我到目前为止所写的:
from collections import deque
length = 1
visited = set()
q = deque()
visited.add("Start")
while q:
v = q.popleft()
length += 1
if v == "End":
return length
else:
for neighbor in graph[v]:
if neighbor not in visited:
visited.add(neighbor)
q.append(neighbor)
return 0
在这里,我假设一个字符串图。一个示例图可以是
graph = { "Start" : ["A"],
"A" : ["B"],
"B" : ["End"],
"End" : []
}
我知道这是错误的,因为它会计算图形的整个大小,而不仅仅是目标路径的长度。如何修改它以将路径的长度返回到它找到的目标?
【问题讨论】:
-
尝试将“从起点到此节点的距离”信息与每个节点相关联。有很多方法可以做到这一点。例如,在队列中保留 (node, distance) 的元组;或使用该信息构建一个单独的字典(将节点映射到它们的距离)。无论哪种方式,随着算法的进展,保持这些信息更新应该很简单。
-
我只是想评论你上传的代码,如果不是
def,你怎么能返回?并且循环不能以空双端队列开始。请更正它,以便其他人可以调试您的代码想法
标签: python breadth-first-search