我编写了以下python程序来执行给定图形的BFS,但在执行后它会出现错误:键错误3 。我的代码出了什么问题?
output=[]
graph = {
1:[2,3,4],
2:[5,6],
5:[9,10],
4:[7,8],
7:[11,12]
}
def bfs(graph,root):
queue = []
visited=set()
queue.append(root)
visited.add(root)
output.append(str(root))
while not(queue==[]):
for item in graph[root]:
if item not in visited:
queue.append(item)
output.append(str(item))
visited.add(item)
root=queue.pop(0)
bfs(graph,1)
print(" ".join(output))
答案 0 :(得分:2)
您正在向队列中添加节点,以便在graph
之内进行搜索,并且在尝试查找之前不检查它们是否位于graph
中。您可以通过将while
循环重写为:
while not(queue==[]):
for item in graph[root]:
if item not in visited:
if item in graph:
queue.append(item)
output.append(str(item))
visited.add(item)
root=queue.pop(0)
(或者,您可以使用1-12中的所有未使用的密钥预先填充graph
,并将空列表作为值。)