C++广度优先搜索&队列

广度优先搜索的定义:

广度优先搜索(BFS)是一种用于图形数据结构的遍历算法,它从给定的起始顶点开始,以广度优先的方式逐层搜索图中的节点,直到找到目标节点或遍历完整个图。BFS算法通常使用队列数据结构来实现,它的时间复杂度为O(V+E),其中V表示图中顶点数,E表示边数。BFS算法在求解最短路径、连通性、拓扑排序等问题中具有重要应用。

我个人认为广度优先搜索比那破玩意 栈 好用多了
作者用栈写过代码,大概1小时多才一道题
下期我发栈的使用!!!

那废话不多说 直接开始!

我先放几张图片:

#

其实广度优先搜索用的基本是队列

来上图片!

在这里插入图片描述
图片来自知予的acgo讨论

好!来洛谷的题目!

B3616 【模板】队列

有洛谷账号的我建议去那写

在这里插入图片描述

重点!!!兄弟们 千万不要让这玩意误导了呀! 上图片

在这里插入图片描述

啊呀 忘了介绍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 选项 两种都喜欢

结束了 作者已下班 bye bye

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值