广搜题目练习(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();
	}
	
}
相关推荐
en.en..6 小时前
C语言核心解析:#define与typedef本质区别
开发语言·c++·算法
码匠许师傅7 小时前
【设计模式精讲】26.策略模式(Strategy)
c++·设计模式·策略模式·uml
果果燕8 小时前
实习笔记(六)主机按钮状态上报完整流程
开发语言·c++·php
是个西兰花8 小时前
网络基础1
linux·网络·c++·智能路由器
老赵的博客8 小时前
c++QT之动态库加载常见报错
c++·qt
wabs6669 小时前
关于二叉树【429.N叉树的层序遍历的思考】
数据结构·c++·算法·leetcode·二叉树
hetao17338379 小时前
2026-09-08 hetao1733837 的刷题记录
c++·算法
码匠许师傅9 小时前
【设计模式精讲】25.状态模式(State)
c++·ui·设计模式·状态模式·uml
C++ 老炮儿的技术栈9 小时前
MFC CPtrArray的用法
开发语言·数据结构·c++·算法·mfc·c
佳児素花痴╮9 小时前
C++基础速通
开发语言·c++