class Graph:
def __init__(self):
self.nodes={}
self.visited = False
self.discovered = False
def vertices(self):
return self.nodes.keys()
def __len__(self):
return len(self.nodes)
def adj(self,u):
if u in self.nodes:
return self.nodes[u]
def insertNode(self,u):
if u not in self.nodes:
self.nodes[u]={}
def insertEdge(self,u,v,w):
self.insertNode(u)
self.insertNode(v)
self.nodes[u][v]=w
def bfs(g,radix):
queue=[radix]
while queue:
u=queue.pop(0)
u.visited=True
for v in G.adj(u):
if not v.visited:
queue.append(v)
return queue
if __name__=='__main__':
g = Graph()
for u, v, w in [('a', 'b', 3), ('a', 'd', 2), ('b', 'c', 5), ('c', 'd', 9), ('c', 'e', 1), ('d', 'e', 4)]:
g.insertEdge(u, v, w)
bfs(g,'a')
我的问题是,当我打电话时:
bfs(g,'a')
PyCharm返回:
u.visited=True
AttributeError: 'str' object has no attribute 'visited'
您将字符串值传递给了
radix
变量。之后,您将队列设置为等于其中包含radix
的数组,因此在while循环中u
变为'a'
,然后尝试对其调用.visited
属性,这是不可能的,因为字符串没有访问属性方法
pop()
从列表中删除元素并返回它。 所以u=queue.pop(0)
正在删除'a'
,它也在返回它。 此处将生成错误:因为字符串
'a'
没有名为visited
的属性相关问题 更多 >
编程相关推荐