我正在尝试使用我的数据集实现广度优先搜索功能。我的数据是一个填充字典并具有列表值的列表。我的数据的一个例子是:
a = [
{'node1':['node2','node3','node5']},
{'node2':['node1','node8','node10']},
{'node3':['node4','node2']},
{'node4':['node2','node1','node3']},
{'node5':['DEADEND']},
{'node6':['GOAL']}
....
]
a
将是我的graph
输入,我的root
是a
中的第一个节点,因此a[0]
我不确定我的BFS是否正确,但我正在测试中。我很快就要输出最短路径的路径。我想知道是否有人可以帮助我指出我的代码导致此错误的位置或我如何解决此问题感谢!
错误:
Traceback (most recent call last):
File "test.py", line 72, in <module>
BFS(a[0], a[0][0])
File "test.py", line 60, in BFS
node = t.keys()
AttributeError: 'str' object has no attribute 'keys'
我的BFS:
def BFS(graph, root):
queue = []
v = [] # set of vertices
queue.append(root)
while queue:
t = queue.pop()
node = t.keys()
if t[node[0]][0] == 'GOAL':
return t
elif t[node[0]][0] == 'DEADEND':
continue
for edges in t[node[0]]:
if edges not in v:
v.append(edges)
queue.append(edges)
return None
答案 0 :(得分:1)
您的错误来自queue.append(edges)
。这是因为edges
是当前节点连接的节点,即str
。因此,当您在while循环中弹出queue
时,最终会在str
中找到queue
,这会导致您看到的错误。
我认为您可以通过用以下内容替换该行来解决您的问题:
for d in graph:
if edges in d.keys():
queue.append(d)