广度优先搜索的定义:
广度优先搜索(BFS)是一种用于图形数据结构的遍历算法,它从给定的起始顶点开始,以广度优先的方式逐层搜索图中的节点,直到找到目标节点或遍历完整个图。BFS算法通常使用队列数据结构来实现,它的时间复杂度为O(V+E),其中V表示图中顶点数,E表示边数。BFS算法在求解最短路径、连通性、拓扑排序等问题中具有重要应用。
我个人认为广度优先搜索比那破玩意 栈 好用多了
作者用栈写过代码,大概1小时多才一道题
下期我发栈的使用!!!
那废话不多说 直接开始!
我先放几张图片:
其实广度优先搜索用的基本是队列
来上图片!
图片来自知予的acgo讨论
好!来洛谷的题目!
有洛谷账号的我建议去那写
重点!!!兄弟们 千万不要让这玩意误导了呀! 上图片
啊呀 忘了介绍queue了!
queue是这么用的
#include <queue> //头文件也要是queue 或者是直接 include <bits/stdc++.h> 万能头
#include <iostream>
1. 追加
queue <类型 > 变量名; 如 int;
queue <int > q;
2. 用法
q.empty() 如果队列为空返回true,否则返回false
q.size() 返回队列中元素的个数
q.pop() 删除队列首元素但不返回其值
q.front() 返回队首元素的值,但不删除该元素
q.push() 在队尾压入新元素
q.back() 返回队列尾元素的值,但不删除该元素
很好 我们可以写题了
第一种
#include <iostream>
#include <queue>
using namespace std;
int main(){
int n,n1,n2;
queue <int > q; //定义
cin >> n;
for (int i = 1;i <= n;i ++){
cin >> n1; //循环输入
switch (n1){ //switch判断
case 1: //如果是1 追加n2道q
cin >> n2;
q.push(n2);
break;
case 2: //如果是2 删除最后一个元素 如果q为空输出ERR_CANNOT_POP
if (!q.empty()) q.pop();
else cout << "ERR_CANNOT_POP" << endl;
break;
case 3: //如果是3 查看第一个元素 如果q为空输出ERR_CANNOT_QUERY
if (!q.empty()) cout << q.front() << endl;else cout << "ERR_CANNOT_QUERY" << endl;
break;
case 4: //如果是4 取q的长度
cout << q.size();
cout << endl;
break;
}
}
return 0;
}
第二种
就两行结束 一摸一样的意思
#include <bits/stdc++.h>
using namespace std;int main(){int n,n1,n2;queue <int > q;cin >> n;for (int i = 1;i <= n;i ++){cin >> n1;switch (n1){case 1:cin >> n2;q.push(n2);break;case 2:if (!q.empty()) q.pop();else cout << "ERR_CANNOT_POP" << endl;;break;case 3:if (!q.empty()) cout << q.front() << endl;else cout << "ERR_CANNOT_QUERY" << endl;break;case 4:cout << q.size();cout << endl;break;}}return 0;}
你们喜欢那种 投个票吧
3 选项 两种都喜欢