广度优先搜索(BFS)Python实现......这里的错误在哪里?

时间:2014-02-24 00:01:30

标签: python attributes breadth-first-search

我已经编写了下面的代码来实现使用python进行广度优先搜索。我不确定.children属性是如何工作的,而.val则不然。我添加了一些打印陈述,看看发生了什么,但我仍然不确定。我运行代码时得到的错误是:

追踪(最近一次通话):   文件“bfs.py”,第31行,in     BFS(节点)   在bfs中输入“bfs.py”,第24行     print popped.children [0] .val AttributeError:'tuple'对象没有属性'val'

以下是代码......非常感谢任何帮助。

class Node:
    def __init__(self, children, val):
        self.children = children
        self.val = val

Node8 = ([], 8)
Node7 = ([], 7)
Node6 = ([], 6)
Node5 = ([Node6], 5)
Node4 = ([], 4)
Node3 = ([Node7], 3)
Node2 = ([Node4, Node5], 2)
Node1 = Node([Node2, Node3, Node8], 1)


def bfs(r):
    node_list = [r]
    while len(node_list) > 0:
        popped = node_list.pop(0)
        print popped.val
        print "debug"
        print popped.children
        print popped.children[0]
        print popped.children[0].val
        for child in popped.children:
            print child.val
            node_list.append(child)
            print "appended"


bfs(Node1)

1 个答案:

答案 0 :(得分:0)

在创建Node以外的任何节点时,您没有调用您创建的Node1构造函数。而是创建2元组,它没有val属性。添加对Node构造函数的调用,一切都应该正常工作:

# ...
Node8 = Node([], 8)
Node7 = Node([], 7)
Node6 = Node([], 6)
Node5 = Node([Node6], 5)
Node4 = Node([], 4)
Node3 = Node([Node7], 3)
Node2 = Node([Node4, Node5], 2)
Node1 = Node([Node2, Node3, Node8], 1)
# ...