题目 :
蒜头君在你的帮助下终于逃出了迷宫,但是蒜头君并没有沉浸于喜悦之中,而是很快的又陷入了思考,从这个迷宫逃出的最少步数是多少呢?
输入格式
第一行输入两个整数 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);
}

最新文章

  1. 接口测试 postman
  2. ICSharpCode.SharpZipLib.dll 移植WP
  3. 再解java中的String
  4. Add and Search Word
  5. Eclipse安装nodeclipse插件
  6. SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第1部分)
  7. spring2.5
  8. Code the Tree
  9. UVa 11572 (滑动窗口) Unique Snowflakes
  10. Oracle连接数过多释放机制
  11. spring-framework-3.2.4.RELEASE 综合hibernate-release-4.3.5.Final一个错误Caused by: java.lang.NoClassDefFound
  12. 淘宝分布式 key/value 存储引擎Tair安装部署过程及Javaclient測试一例
  13. codefirst mvc Self referencing loop detected for property
  14. LightOJ1259 Goldbach`s Conjecture
  15. golang:高性能消息队列moonmq的简单使用
  16. 如何使用php生成唯一ID的4种方法
  17. Vue组件的定义、注册和调用
  18. 阿里云服务器 ECS Linux 禁止IP 通过 SSH 登录
  19. windows IOCP入门的一些资料
  20. mysql存储引擎ARCHIVE

热门文章

  1. java常见面试题总结2
  2. .net core 响应的json数据驼峰显示问题。
  3. OpenResty Lua钩子调用完整流程
  4. 安鸾CTF Writeup SSRF02
  5. 不同JDK版本的流异常处理
  6. 【Azure 应用服务】App Service .NET Core项目在Program.cs中自定义添加的logger.LogInformation,部署到App Service上后日志不显示Log Stream中的问题
  7. 理解js运行时的一些概念
  8. ASP.NET Core:ASP.NET Core程序使用Docker部署
  9. C#异步编程2
  10. ASP.Net Core Web Api 使用 IdentityServer4 最新版 踩坑记录