我遇到了一个涉及集合和双端队列的BFS 代码,但我不太理解。我希望这里的一些pythonistas可以帮助n00b。
from collections import deque
def bfs(g, start):
queue, enqueued = deque([(None, start)]), set([start])
while queue:
parent, n = queue.popleft()
yield parent, n
new = set(g[n]) - enqueued
enqueued |= new
queue.extend([(n, child) for child in new])
问题:
1) |= 运算符似乎与按位运算有关-我不知道它与 BFS 有何关系,有什么提示吗?
2) popleft()应该只返回我所理解的一个值,那么它如何返回 parent 和 n 呢?
3)访问的节点系列是新的吗?如果我想要节点,我是否只是继续将它们附加到列表中?
提前致谢。
克雷格