37 lines
1.1 KiB
Markdown
37 lines
1.1 KiB
Markdown
# 广度优先遍历
|
|
|
|
1. 保留全部节点状态,占用空间大
|
|
2. 无回溯操作(即无入栈、出栈操作),运行速度快
|
|
3. 对于解决最短或最少问题特别有效,而且寻找深度小(每个结点只访问一遍,结点总是以最短路径被访问,所以第二次路径确定不会比第一次短)
|
|
|
|
```cpp
|
|
#include <queue>
|
|
|
|
// 新建一个数据结构,用来描述当前节点状态
|
|
typedef struct NodeStateStruct {
|
|
int para1;
|
|
int para2;
|
|
int para3;
|
|
} NodeState;
|
|
|
|
int main(void) {
|
|
// 讨论边界条件,比如字符串长度为 0 之类的
|
|
|
|
// 初始化一个队列
|
|
std::queue<NodeState> queue;
|
|
// 把根节点放进去
|
|
queue.push(NodeState {0, 0, 0});
|
|
// 开始迭代,当队列为空时结束迭代
|
|
NodeState node;
|
|
while (!queue.empty()) {
|
|
// 弹出队首
|
|
node = queue.front();
|
|
queue.pop();
|
|
// 遍历队首的所有子节点并把它们放到队尾
|
|
queue.push(/* child node 1 */);
|
|
queue.push(/* child node 2 */);
|
|
queue.push(/* child node 3 */);
|
|
}
|
|
}
|
|
```
|