def BFS(start, target):
q = queue.Queue() #队列
q.put(start) #初始放入起点
visited = set() #记录访问过的结点
step = 0 #搜索迭代次数
visited.add(start)
while not q.empty():
#记录当前队列大小(BFS本轮迭代),以供后续遍历
size = q.qsize()
for i in range(size):
cur = q.get() #从队列取出一个
#visited.add(cur) #【2】加入已访问结点集合
if cur == target:
return step
#遍历cur结点的所有相邻结点,若未访问则加入队列
for node in cur.adj():
if node not in visited:
q.put(node)
visited.add(node) #【1】加入已访问结点集合
#注意要在此处更新迭代次数
step += 1