执行广度优先搜索时,为什么我需要节点的“访问”状态?

时间:2012-07-19 08:52:33

标签: algorithm graph breadth-first-search

我写了一个用于在图表中搜索的算法,我使用了一个标志来指示一个节点是否被访问过,所以如果我的图表中有一个圆圈,我就不会陷入循环。

我后来检查了一个算法书,它使用3个状态而不是2个,第3个是“访问”状态。我想知道为什么它存在,因为我可以在没有它的情况下进行搜索?

2 个答案:

答案 0 :(得分:2)

“访问”状态没有多大意义 - 每个节点只有在你处理它的邻居并将它们排队时才会处于这种状态 - 你完全清楚你当时正在访问哪个节点。 / p>

什么才有意义(但仍然不需要)是一个'排队'状态,例如这个动画中的灰色节点(来自维基百科)

答案 1 :(得分:1)

这不是严格需要的,但是一些使用BFS作为基本构建块的算法使用这个信息,因此是额外的状态。

我想从教育的角度来看,这也是一个好处,因为插图可以更好地了解正在发生的事情。