BFS
- 参数
- 是否标记 or 过界
- queue <类型x> 名称q;
- 相关函数
q.push(x);//入队
q.pop(x);//出队
q.front();//队首元素
q.empty();//是否为空(bool)
- 大体思路
void BFS(参数(此位置))
{
if(标记过or过界) return;
标记此位置;
queue <类型x> 名称q;//创建一个队列
x temp=参数(此位置);//temp临时传参,当x为结构体时要用到
q.push(temp);//入队
//这之前都是关于初始位置的
while (!q.empty())//当队列不为空BFS核心(分层入队)
{
temp2 = q.front();//队首传参
q.pop();//队首出队
for (...)//遍历邻边
{
if (未标记or未过界)//邻边满足条件
{
标记邻边;
q.push(邻边);//邻边入队
//标记和入队 谁在前视情况而定
}
}
}
//while里面是BFS的核心 分层入队
}
while里面是BFS的核心 分层入队:
分层入队
一开始看不懂BFS以为和DFS差不多,更不懂队列与BFS的关系
实际上为什么叫分层呢?