我的任务是在给定图形中执行BFS搜索后,打印出连接到当前顶点的所有前置。然而,我在代码中遇到了一个问题,在这个问题中,它只打印出最后一个探索的前置程序
pred = {}
level = {}
def bfs(G, S):
kyu = deque([S])
pred[S] = []
level[S] = 0
while len(kyu) > 0:
curr = kyu.popleft()
neighbors = G[curr]
for neighbor in neighbors:
if neighbor not in pred:
pred[neighbor] = curr
level[neighbor] = level[curr] + 1 # added
kyu.append(neighbor)
def bfs_runner(G):
components = 0
for v in G:
if v not in pred:
components += 1
bfs(G, v)
return components
样本输入:
G = {
'A': ['B'],
'B': ['A', 'C', 'D'],
'C': ['B', 'E'],
'D': ['B', 'E'],
'E': ['C', 'D']
}
所需输出:
pred = {
'A': [],
'B': ['A'],
'C': ['B'],
'D': ['B'],
'E': ['C', 'D']
}
我的输出:
pred = {
'A': [],
'B': ['A'],
'C': ['B'],
'D': ['B'],
'E': ['C']
}
您可以按如下方式修改代码:
说明:您正在覆盖
pred[neighbor]
的值,而不是附加到它defaultdict(list)
如果邻居尚未在pred中,则自动将pred[neighbor]
初始化为空列表。同样地,对于级别注意:从我的手机完成。没有测试
编辑:
完全重写:
输出:
相关问题 更多 >
编程相关推荐