我正在查看维基百科上的伪代码
Breadth-First-Search(Graph, root):
2
3 for each node n in Graph:
4 n.distance = INFINITY
5 n.parent = NIL
6
7 create empty queue Q
8
9 root.distance = 0
10 Q.enqueue(root)
11
12 while Q is not empty:
13
14 current = Q.dequeue()
15
16 for each node n that is adjacent to current:
17 if n.distance == INFINITY:
18 n.distance = current.distance + 1
19 n.parent = current
20 Q.enqueue(n)
https://en.wikipedia.org/wiki/Breadth-first_search
我感到好奇的是,是否有一个特定的原因,为什么使用队列来保存节点。在我看来,可以使用任何容器,因为通过容器中当前元素的顺序是无关紧要的。
答案 0 :(得分:0)
队列不仅仅是一个容器。这正是该算法的关键思想。
队列是 1.一个容器肯定。 2.它只能按特定顺序添加/弹出(队列和堆栈都具有此属性)
第二点是回答你问题的关键点。
如果您使用队列作为一般列表,通过列表索引直接添加和弹出元素,整个算法就不那么简单了。 (即队列不再是队列)
答案 1 :(得分:0)