如何解决bfs 没有为父数组提供正确的输出
我有一个函数 bfs_tree,它应该返回给定图形的父数组(bfs_loop 是一个辅助函数),但是对于下面的图形字符串(用我的 adj 列表函数将其转换为 adj 列表),其中起始节点是1,它在应该给出 [None,None,1,4,5,1]
时给出了 [None,2,1]
的父数组,但我不确定它哪里出错了?
import collections
def adjacency_list(graph_str):
"""Takes a graph string and returns the adjacency list"""
lines = graph_str.splitlines()
header = lines[0].split()
if len(header) > 2:
graph_type,vertices,weight = header[0],header[1],header[2]
else:
graph_type,vertices = header[0],header[1]
weight = None
edges = lines[1:]
adj_list = [[] for _ in range(int(vertices))]
if len(edges) > 0:
for edge in edges:
if weight == 'W':
v1,v2,w = edge.split()
v1,w = int(v1),int(v2),int(w)
else:
v1,v2 = edge.split()
v1,v2 = int(v1),int(v2)
w = None
if graph_type == 'U':
adj_list[v1] += [(v2,w)]
adj_list[v2] += [(v1,w)]
else:
adj_list[v1] += [(v2,w)]
return adj_list
def bfs_tree(adj_list,start):
"""bfs"""
parent = [None]*len(adj_list)
state = ['U']*len(adj_list)
q = collections.deque([])
state[start] = 'D'
q.append(start)
return bfs_loop(adj_list,q,state,parent)
def bfs_loop(adj_list,parent):
while len(q) != 0:
item = q.pop()
for exact_child in adj_list[item]:
child = exact_child[0]
if state[child] == 'U':
state[child] = 'D'
parent[child] = item
q.append(child)
state[item] = 'P'
return parent
graph_str = """\
U 7
1 2
1 5
1 6
2 3
2 5
3 4
4 5
"""
adj_list = adjacency_list(graph_str)
print(bfs_tree(adj_list,1))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。