BFS--备战蓝桥杯版h

BFS 广度优先搜索(Breadth-First-Search)

宽度优先搜索,BFS是用于图的查找算法(要求能用图表示出问题的关联性)。

BFS可用于解决2类问题:

1.从A出发是否存在到达B的路径;

2.从A出发到达B的最短路径;
整体思路

其思路为从图上一个节点出发,访问先访问其直接相连的子节点,若子节点不符合,再问其子节点的子节点,按级别顺序(一层一层)依次访问,直到访问到目标节点

· 起始:将起点(源点,树的根节点)放入队列中

· 扩散:从队列中取出队头的结点,将它的相邻结点放入队列,不断重复这一步

· 终止:当队 列为空时,说明我们遍历了所有的结点,整个图都被搜索了一追
对于所有边长度相同的情况,比如地图的模型,bfs第一次遇到目标点,此时就一定是从根节点到目标节点最短的路径(因为每一次所有点都是向外扩张一步,你先遇到,那你就一定最短)。bfs先找到的一定是最短的。但是如果是加权边的话这样就会出问题了,bfs传回的是经过边数最少的解,但是因为加权了,这个解到根节点的距离不一定最短。比如1000+1000是只有两段,1+1+1+1有4段,由于bfs返回的经过边数最少的解,这里会返回总长度2000的那个解,显然不是距离最短的路径。此时我们就应该采用Dijkstra最短路算法解决加权路径的最短路了。

练习

844. 走迷宫 - AcWing题库

cpp 复制代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int N=110;
int g[N][N];
int d[N][N];
int n,m;
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};


int bfs()
{
	queue<int> qx,qy;
	memset(d,-1,sizeof d); 
	d[0][0]=0;
	qx.push(0);
	qy.push(0);
	
	while(!qx.empty())
	{
		int x=qx.front();qx.pop();
		int y=qy.front();qy.pop();
		for(int i=0;i<4;i++)
		{
			int nx=x+dx[i];
			int ny=y+dy[i];
			if(nx>=0&&nx<n&&ny>=0&&ny<m&&g[nx][ny]==0&&d[nx][ny]==-1)
			{
				d[nx][ny]=d[x][y]+1;
				qx.push(nx);
				qy.push(ny);
			}	
		}
	}
	return d[n-1][m-1];
}

int main()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cin>>g[i][j];
		}
	}
	cout<<bfs();
	return 0;
 } 

P1746 离开中山路 - 洛谷

多源bfs

P1332 血色先锋队 - 洛谷

173. 矩阵距离 - AcWing题库

P1747 好奇怪的游戏 - 洛谷

染色问题

P1162 填涂颜色 - 洛谷

P1506 拯救oibh总部 - 洛谷

P1059 NOIP 2006 普及组 明明的随机数 - 洛谷

有限制的bfs

P2895 USACO08FEB Meteor Shower S - 洛谷

P3395 路障 - 洛谷

比较难的几个

P2658 汽车拉力比赛 - 洛谷(与二分相结合)

P1126 CERC1996 机器人搬重物 - 洛谷(增加了一个方向)

双端队列bfs

P4554 小明的游戏 - 洛谷

P4667 BalticOI 2011 Switch the Lamp On (Day1) - 洛谷

双向队列(一维与二维的转换而且变换的是0的位置)---只要是有终点和起点的都可以

P1379 八数码难题 - 洛谷

相关推荐
布莱克6052 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
D e re k ZH5 小时前
C++ 系统学习手记:从语法细节到工程实践
开发语言·数据结构·c++·算法
石小石Orz6 小时前
AI 正在蚕食我们的编码能力
前端·后端·算法
民乐团扒谱机7 小时前
【微实验】NSGA-II(非支配排序遗传算法)——解决多目标优化问题的“自然选择模拟器”
linux·人工智能·算法
青少儿编程课堂7 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛
武子康9 小时前
Qwen-Drive 到底是什么:4B 级 VLM 如何成为驾驶策略底座
人工智能·算法·机器学习
zh_xuan11 小时前
LeeCode 496. 下一个更大元素I
数据结构·算法·栈·单调栈
机 _ 长11 小时前
05 智算运维|8 张卡怎么才算「捆成一张」:NCCL 实测与拓扑
运维·人工智能·算法·智算运维
早起CaiCai12 小时前
【2023-01 OM】利用深度学习算法融合异质观测实现海洋场降尺度
人工智能·深度学习·算法