我在网上找到了很多BFS
个示例代码,但输入的格式与我的格式不同,输出效果不如预期。
我有一个节点列表nodesList
,每个节点对象都有一个节点id
,并且在id
中包含其所有neighboursList
个邻居节点。现在我想使用BFS
构建nodesList
。据我所知,如果我知道,可以进行计算并构建BFS
:
BFS
[级别1:根等等]的每个级别中有哪些节点
BFS
BFS
BFS
id
节点BFS
所以我创建了另一个名为BFSnode
的类,它存储了我需要的信息。虽然我总能找到前两个级别,因为我不知道输入图形有多大,但我很困惑如何使用递归动态地找到这些级别。由于我不熟悉动态编程和递归,如果有人可以帮助我,我们将不胜感激。非常感谢。
答案 0 :(得分:0)
要进行广度优先搜索,您不需要使用递归或动态编程。
广度优先搜索通常使用队列数据结构:
1.首先将根节点或要开始搜索的节点添加到队列中
2.队列中有节点时,首先将下一个节点出列。然而,您需要处理它并将其孩子排队。
3.当队列为空时搜索结束。
粗糙代码(未经测试):
class Node(object):
def __init__(self, val):
self.val = val
self.children = []
def breadth_first_search(root):
next_nodes = Queue()
next_nodes.enqueue(root)
while not next_nodes.empty():
cur_node = next_nodes.dequeue()
# Do something with cur_node
for child in cur_node.children:
next_nodes.enqueue(child)
我假设存在一个Queue对象,它支持enqueue,dequeue和empty,它不是python中的内置函数。您可以编写自己的,使用列表,或使用collections.deque和append()和popleft()而不是enqueue和dequeue。
我还假设图表没有周期。看起来你正在使用树木,所以这可能是一个安全的假设。