广搜题目练习(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();
	}
	
}
相关推荐
励志不掉头发的内向程序员2 小时前
【从零写一个CAD 03】三个 double 值得单独一个类吗:把视图变换抽成 View
开发语言·c++·qt·学习·系统架构
Doubbbbbbble云2 小时前
基于贪心算法的区间覆盖问题求解策略4
算法·贪心算法
不会就选b8 小时前
算法日常・每日刷题--<贪心>25
数据结构·算法
蒸蒸yyyyzwd8 小时前
秋招学习笔记 day46
c++·八股
千里码aicood12 小时前
基于CART算法的图书分类系统设计与实现
数据库·算法·分类
码匠许师傅12 小时前
【C++三方组件】cpp-httplib:一个头文件起 HTTP 服务
开发语言·c++·http
做cv的小昊12 小时前
【World Model】π0.5:a Vision-Language-Action Model with Open-World Generalization
人工智能·算法·机器学习·大模型·多模态·vla·世界模型
لا معنى له13 小时前
World-In-World: World Models in a Closed-Loop World
算法
无名猿13 小时前
new/delete 与 malloc/free:为什么绝对不能混用
c++·内存管理·现代c++·踩坑记录