#include<iostream>
#include<string>
#include<queue> //小广搜必备队列
using namespace std;//queue需要std
int main()
{
//搜索(Search)是作为一个 OIer 必需会且较为基础的算法
//它的本质是有规律、有策略地枚举所有可能的情况,并在其中剪除无效状态,达到较快的求解速度
//根据搜索扩展策略的不同、搜索分为 深度优先搜索(DFS)和 广度优先搜索(BFS)两种
//广度优先搜索(Breadth-First Search,简称BFS)是搜索的一种,他的策略是“由近及远”
//先扩展最近的结点、再一点一点往外搜
//因为它的策略是“由近及远”,而C++不能一次执行多条语句(fvv),所以我们必须用 队列 存储所有的节点信息、
//在将初始状态入队后,每次取出队首,如果寻找到合法的操作就入队
//循环直到队列为空、即搜索完成
//代码框架
/*
queue<State> q;
while(!q.empty)
{
State t=q.front();
q.pop()
for(枚举所有可扩展状态)
if(是合法的)
q.push(可扩展状态); //同时可能需要维护某些必要信息
}
*/
//广度优先搜索有两种主要题型
//1. 最短路
//因为广度优先搜索的特性,它总能找到操作步骤最少的解,所以广度优先搜索适合寻找所谓的“最短路”
//经典题目:
//#A1330. 【例8.3】最少步数
//#A1252. 走迷宫
//#A1255. 迷宫问题
//#A1360. 奇怪的电梯(lift)
//2. 连通块
//连通块可以理解为一个点的集合,若两点间可直接或间接的连接则两点在同一连通块中
//这个……广搜深搜都可以
//经典题目:#A1329. 【例8.2】细胞
}