迷宫2----BFS
2024-08-31 06:39:35
题目 :
蒜头君在你的帮助下终于逃出了迷宫,但是蒜头君并没有沉浸于喜悦之中,而是很快的又陷入了思考,从这个迷宫逃出的最少步数是多少呢?
输入格式
第一行输入两个整数 n 和 m,表示这是一个 n×m 的迷宫。
接下来的输入一个 n 行 m 列的迷宫。其中 ‘S’表示蒜头君的位置,’‘表示墙,蒜头君无法通过,’.‘表示路,蒜头君可以通过’.'移动,'T’表示迷宫的出口(蒜头君每次只能移动到四个与他相邻的位置——上,下,左,右)。
输出格式
输出整数,表示蒜头君逃出迷宫的最少步数,如果蒜头君无法逃出迷宫输出 −1。
数据范围
1≤n,m≤10。
输出时每行末尾的多余空格,不影响答案正确性
样例输入1
3 4
S**.
..*.
***T
样例输出1
-1
样例输入2
3 4
S**.
....
***T
样例输出2
5
代码:
#include<iostream>
#include<queue>
using namespace std; struct Node
{
int x,y,step;
Node(int xx,int yy,int ss):x(xx),y(yy),step(ss){ }
}; queue<Node>q;
bool mark[20][20];
int n,m,beginx,beginy,endx,endy,step=0; char map[20][20];
int dx[5]={0,0,-1,1};
int dy[5]={-1,1,0,0};
//限界函数
bool check(int r,int c){
if (r>=0&&r<n&&c>=0&&c<m)
return true;
return false;
}
void BFS(int r,int c){
//第一步,先把起始点放入queue,设置层数step=0
q.push(Node(r,c,0));
//第二步,查找,队列非空就有机会找到
while (!q.empty())
{
//第三步,取对头
Node s = q.front();
//找到即可退出
if (s.x==endx&&s.y==endy)
{
cout<<s.step<<endl;
return ;
}else
{
//遍历子节点
for (int i = 0; i < 4; i++)
{
int newx=s.x+dx[i];
int newy = s.y+dy[i]; //判断子节点是否可以通过,可通过则压栈,设置已访问
if (check(newx,newy)&&!mark[newx][newy]&&map[newx][newy]!='*')
{
mark[newx][newy]=true;
q.push(Node(newx,newy,s.step+1));
}
}
}
q.pop();
}
cout<<"-1"<<endl;
return; }
int main(){
cin>>n>>m;
for (int i = 0; i < n; i++)
{
cin>>map[i];
for (int j=0; j < m; j++)
{
if (map[i][j]=='S')
{
beginx= i;
beginy=j;
}else if (map[i][j]=='T')
{
endx= i;
endy=j;
}
}
}
BFS(beginx,beginy);
}
最新文章
- 接口测试 postman
- ICSharpCode.SharpZipLib.dll 移植WP
- 再解java中的String
- Add and Search Word
- Eclipse安装nodeclipse插件
- SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第1部分)
- spring2.5
- Code the Tree
- UVa 11572 (滑动窗口) Unique Snowflakes
- Oracle连接数过多释放机制
- spring-framework-3.2.4.RELEASE 综合hibernate-release-4.3.5.Final一个错误Caused by: java.lang.NoClassDefFound
- 淘宝分布式 key/value 存储引擎Tair安装部署过程及Javaclient測试一例
- codefirst mvc Self referencing loop detected for property
- LightOJ1259 Goldbach`s Conjecture
- golang:高性能消息队列moonmq的简单使用
- 如何使用php生成唯一ID的4种方法
- Vue组件的定义、注册和调用
- 阿里云服务器 ECS Linux 禁止IP 通过 SSH 登录
- windows IOCP入门的一些资料
- mysql存储引擎ARCHIVE
热门文章
- java常见面试题总结2
- .net core 响应的json数据驼峰显示问题。
- OpenResty Lua钩子调用完整流程
- 安鸾CTF Writeup SSRF02
- 不同JDK版本的流异常处理
- 【Azure 应用服务】App Service .NET Core项目在Program.cs中自定义添加的logger.LogInformation,部署到App Service上后日志不显示Log Stream中的问题
- 理解js运行时的一些概念
- ASP.NET Core:ASP.NET Core程序使用Docker部署
- C#异步编程2
- ASP.Net Core Web Api 使用 IdentityServer4 最新版 踩坑记录