广搜题目练习(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();
	}
	
}
相关推荐
j_xxx404_3 小时前
MySQL表操作硬核解析:从 CREATE TABLE 到磁盘文件、ALTER TABLE 与 DDL 风险
运维·服务器·数据库·c++·mysql·adb·ai
wuminyu3 小时前
Java锁机制之park和unpark源码剖析
java·linux·c语言·jvm·c++
梦梦代码精3 小时前
为什么这个开源的AI平台会火?有点东西。。。
人工智能·算法·机器学习·docker·开源
随意起个昵称4 小时前
线性dp-综合刷题1(Not Alone)
算法·动态规划
玖玥拾4 小时前
C/C++ 基础笔记(十一)类的进阶
c语言·c++·设计模式·
-森屿安年-4 小时前
1137. 第 N 个泰波那契数
c++·动态规划
如何原谅奋力过但无声5 小时前
【灵神高频面试题合集09-13】二叉树、二叉搜索树
数据结构·算法·leetcode
程序员老舅5 小时前
从内核视角,看Linux文件读写过程
linux·服务器·c++·内核·linux内核·vfs·linux内存
皆圥忈5 小时前
磁盘物理结构与文件系统基础讲解
linux·算法
数据仓库搬砖人5 小时前
用 LangGraph 从零搭一个客服 Agent:多轮对话 + 工具调用全流程
算法