【发布时间】:2020-08-06 07:03:52
【问题描述】:
我已经编写了两个版本的 BFS,但是其中一个有错误并且不会导致正确的结果。但我无法弄清楚错误是什么。
正确版本:
def find_all_distances(self, start_node):
distance = {}
marked = {}
marked[start_node] = True
distance[start_node] = 0
queue = [start_node]
while queue:
node = queue.pop(0)
for adj_node in self.adj[node]:
if adj_node not in marked:
marked[adj_node] = True
distance[adj_node] = distance[node] + 6
queue.append(adj_node)
越野车版本:
def find_all_distances(self, start_node):
distance = {}
marked = {}
queue = [(start_node, 0)]
while queue:
node, dist = queue.pop(0)
marked[node] = True
distance[node] = dist
for adj_node in self.adj[node]:
if adj_node not in marked:
queue.append((adj_node, dist + 6))
对我来说唯一明显的区别是我们标记访问的时间 - 在添加到队列之前或从队列中弹出之后。为什么会影响结果?
【问题讨论】:
标签: algorithm debugging graph breadth-first-search