我正在尝试编码BFS算法但我收到此错误"不可用的类型:' list'"这是我无法处理的。你能帮忙吗?
mygraph = { "1": ["2", "4"], "2": ["3", "5"], "3": ["6"],
"4": ["5","7"], "5": ["8"], "6": ["9"], "7": ["8"], "8": ["9"]}
level = {"1":None}
parent = {"1":None}
i = 1
frontier = ["1"]
while frontier:
nex = []
adj = []
for u in frontier:
adj.append (mygraph.get (u))
for v in adj:
if v not in level:
level [v] = i
parent [v] = u
nex.extend (v)
frontier = nex
i += 1
答案 0 :(得分:0)
目前v
是顶点列表,而不是单个顶点。当您尝试将其用作字典键时,这会导致错误。以这种方式使用它是一个错误。您的词典应该是从单个顶点(如"1"
)映射到其他内容,但是当您从v
获取adj
值时,您将使用错误的值作为键列表。
我认为您根本不需要维护adj
列表。您只想在u
邻接列表的成员上循环一次,然后获取frontier
中下一个顶点的相邻顶点的新列表。
所以,而不是:
adj.append (mygraph.get (u))
for v in adj:
只是做:
for v in mygraph.get(u):
(并丢弃不再需要的adj
变量。)
请注意,如果您的图表不完整,也就是说,有些顶点没有外边缘,您可能需要将get
调用更改为mygraph.get(u, [])
,以便它始终返回某些内容可迭代。