leetcode/notes/src/bfs.md
2022-11-14 10:45:37 +08:00

1.1 KiB

广度优先遍历

  1. 保留全部节点状态,占用空间大
  2. 无回溯操作(即无入栈、出栈操作),运行速度快
  3. 对于解决最短或最少问题特别有效,而且寻找深度小(每个结点只访问一遍,结点总是以最短路径被访问,所以第二次路径确定不会比第一次短)
#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 */);
    }
}