广度优先搜索Python程序错误:关键错误3

时间:2014-04-04 11:45:54

标签: python algorithm

enter image description here我编写了以下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))

1 个答案:

答案 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,并将空列表作为值。)