广搜题目练习(c++)

题目

走出迷宫的最小步数

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
struct node
{
	int x,y,v;
	node(){};
	node(int aaaaa,int bbbbb,int ccccc)
	{
		x = aaaaa;
		y = bbbbb;
		v = ccccc;
	}
};queue<node> que;

char a[1010][1010];
int n,m;
int b[1010][1010];
int cnt;

int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};

void bfs(int,int);

int main()
{
	cin>>n>>m;
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			cin>>a[i][j];
		}
	}
	
	bfs(1,1);
	
	cout<<cnt;
	
	return 0;
}
void bfs(int _x,int _y)
{
	b[_x][_y] = 1;
	que.push({_x,_y,1});
	while(que.empty()==false)
	{
		node head = que.front();
		que.pop();
		for(int i = 0;i<4;i++)
		{
			int tx = head.x+dx[i];
			int ty = head.y+dy[i];
			if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&b[tx][ty]==0&&a[tx][ty]=='.')
			{
				b[tx][ty] = 1;
				que.push({tx,ty,head.v+1});
				if(tx==n&&ty==m)
				{
					cnt = que.back().v;
					return;
				}
			}
		}
	}
}

走出迷宫的最短路径

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
struct node
{
	int x,y,v;
	node(){};
	node(int aaaaa,int bbbbb,int ccccc)
	{
		x = aaaaa;
		y = bbbbb;
		v = ccccc;
	}
};queue<node> que;

char a[1010][1010];
int n,m;
int b[1010][1010];
int cnt;

int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};

void bfs(int,int);

int main()
{
	cin>>n>>m;
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			cin>>a[i][j];
		}
	}
	cnt = -1;
	bfs(1,1);
	if(cnt==-1) cout<<"no way";
	else cout<<cnt;
	
	return 0;
}
void bfs(int _x,int _y)
{
	b[_x][_y] = 1;
	que.push({_x,_y,1});
	while(que.empty()==false)
	{
		node head = que.front();
		que.pop();
		for(int i = 0;i<4;i++)
		{
			int tx = head.x+dx[i];
			int ty = head.y+dy[i];
			if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&b[tx][ty]==0&&a[tx][ty]=='.')
			{
				b[tx][ty] = 1;
				que.push({tx,ty,head.v+1});
				if(tx==n&&ty==m)
				{
					cnt = que.back().v;
					return;
				}
			}
		}
	}
}

迷宫出口

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
struct node
{
	int x,y,v;
	node(){};
	node(int aaaaa,int bbbbb,int ccccc)
	{
		x = aaaaa;
		y = bbbbb;
		v = ccccc;
	}
};queue<node> que;

int a[1010][1010];
int n,m;
int b[1010][1010];
int sx,sy,ex,ey;

int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};

bool bfs(int,int);

int main()
{
	cin>>n;
	m = n;
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			cin>>a[i][j];
		}
	}
	cin>>sx>>sy>>ex>>ey;
	if(a[sx][sy]==1||a[ex][ey]==1)
	{
		cout<<"NO";
		return 0;
	}
	if(bfs(sx,sy)==true) cout<<"YES";
	else cout<<"NO";
	
	
	return 0;
}
bool bfs(int _x,int _y)
{
	b[_x][_y] = 1;
	que.push({_x,_y,1});
	while(que.empty()==false)
	{
		node head = que.front();
		que.pop();
		for(int i = 0;i<4;i++)
		{
			int tx = head.x+dx[i];
			int ty = head.y+dy[i];
			if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&b[tx][ty]==0&&a[tx][ty]==0)
			{
				b[tx][ty] = 1;
				que.push({tx,ty,head.v+1});
				if(tx==ex&&ty==ey)
				{
					return true;
				}
			}
		}
	}
	return false;
}

鸡飞狗不跳

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
struct node
{
	int x,v;
	node(){};
	node(int aaaaa,int bbbbb)
	{
		x = aaaaa;
		v = bbbbb;
	}
};queue<node> que;

int n,m;
int a[100010];

int bfs();

int main()
{
	
	cin>>n>>m;
	if(n==m) cout<<0;
	else cout<<bfs();
	
	return 0;
}
int bfs()
{
	a[n] = 1;
	que.push({n,0});
	while(que.empty()==false)
	{
		node q1 = {que.front().x+1,que.front().v+1};
		node q2 = {que.front().x-1,que.front().v+1};
		node q3 = {que.front().x*2,que.front().v+1};
		if(q1.x==m||q2.x==m||q3.x==m) return q1.v;
		if(q1.x>=0&&q1.x<=100010&&a[q1.x]==0)
		{
			que.push(q1);
			a[q1.x] = 1;
		}
		if(q2.x>=0&&q2.x<=100010&&a[q2.x]==0)
		{
			que.push(q2);
			a[q2.x] = 1;
		}
		if(q3.x>=0&&q3.x<=100010&&a[q3.x]==0)
		{
			que.push(q3);
			a[q3.x] = 1;
		}
		que.pop();
	}
	
}
相关推荐
YuanDaima20481 小时前
贪心算法基础原理与题目说明
数据结构·人工智能·python·算法·贪心算法·手撕代码
NashSKY1 小时前
波束成形MVDR (最小方差无失真响应) 算法数学原理解析
算法·矩阵
郝学胜-神的一滴1 小时前
Qt 高级开发 006: 架构全解 + 高效学习指南
开发语言·c++·qt·程序人生·架构
人道领域1 小时前
【LeetCode刷题日记】513.二叉树左下角值的三种解法:从常规BFS到DFS的优雅之旅
数据结构·算法·leetcode·深度优先·广度优先
我命由我123451 小时前
Visual Studio - Visual Studio 注释快捷键
java·c语言·开发语言·c++·ide·java-ee·visual studio
小哈蒙德2 小时前
基于deepSeekV4Pro(thinking)研究pointPillar的历程
python·算法
兰令水2 小时前
topcode【随机算法题】【2026.5.16打卡-java版本】
java·数据结构·算法
NashSKY2 小时前
关于支持向量机(SVM)的数学原理、参数拟合、嵌入式部署的完整指南
c++·python·机器学习·支持向量机
Shan12052 小时前
广度优先搜索之层序遍历
数据结构·算法·宽度优先