1254:走出迷宫

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 9105     通过数: 4245

【题目描述】

当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。

假设你已经得到了一个n×m的迷宫的图纸,请你找出从起点到出口的最短路。

【输入】

第一行是两个整数n和m(1≤n,m≤100),表示迷宫的行数和列数。

接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符‘.’表示空地,‘#’表示墙,‘S’表示起点,‘T’表示出口。

【输出】

输出从起点到出口最少需要走的步数。

【输入样例】

3 3
S#T
.#.
...

【输出样例】

6

【分析】

迷宫问题可以用dfs,也可以用bfs实现,本题数据量比较大,只能用bfs实现,dfs超时。

【参考代码】

#include <iostream>
#include <cstdio>
#include <queue>using namespace std;char a[100][100];  // 原地图
bool v[100][100];  // 访问数组 struct point
{int x,y;     // 坐标int step;    // 步数
};queue <point> r; // 申请队列
int dx[4]={0,1,0,-1}; // 方向数组,右,下,左,上
int dy[4]={1,0,-1,0};
int startx,starty;    // 起始点坐标
int p,q;              // 终点坐标
int m,n;void bfs()
{point s;           // 初始化队列s.x=startx;s.y=starty;s.step=0;r.push(s);         // 起点入队v[startx][starty]=1;while(!r.empty())      // 判断队列是否为空 {point t,tmp;t=r.front();if(t.x==p && t.y==q)   // 判断是否是终点 {cout << t.step << endl;return;}for(int k=0;k<4;k++)  // 四个方向 {tmp.x=t.x+dx[k];tmp.y=t.y+dy[k];if(tmp.x>=1 && tmp.x<=m && tmp.y>=1 && tmp.y<=n && a[tmp.x][tmp.y]=='.' && v[tmp.x][tmp.y]==false)  // 判断能不能走 {// 入队处理tmp.step=t.step+1;r.push(tmp);      // 入队 v[tmp.x][tmp.y]=true;   // 标记 }}r.pop(); // 拓展完了,需要将队首元素出队}
}
int main()
{int i,j;scanf("%d%d",&m,&n);getchar();for(i=1;i<=m;i++){for(j=1;j<=n;j++){scanf("%c",&a[i][j]); // '.'表示空地,'#'表示障碍物if(a[i][j]=='S'){startx=i;starty=j;a[i][j]='.';}if(a[i][j]=='T'){p=i;q=j;a[i][j]='.';}}getchar();}v[startx][starty]=true;bfs();return 0;
}

http://ybt.ssoier.cn:8088/problem_show.php?pid=1254

信息学奥赛一本通(1254:走出迷宫)相关推荐

  1. 信息学奥赛一本通 1254:走出迷宫 | OpenJudge NOI 2.5 6264:走出迷宫

    [题目链接] ybt 1254:走出迷宫 OpenJudge NOI 2.5 6264:走出迷宫 [题目考点] 1. 广搜 迷宫问题 [解题思路] 广搜,迷宫问题模板题. 当数据量很小时,用深搜的方法 ...

  2. 信息学奥赛一本通(1215:迷宫)

    1215:迷宫 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 29437     通过数: 8772 [题目描述] 一天Extense在森林里探险的时候不小心走入 ...

  3. 【信息学奥赛一本通】1215:迷宫(bfs版)

    [题目描述] 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n×n的格点组成,每个格点只有2种状态,'.'和'#',前者表示可以通行后者表示不能通行.同时当Extense处 ...

  4. 信息学奥赛一本通(1255:迷宫问题)

    1255:迷宫问题 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 7919     通过数: 3656 [题目描述] 定义一个二维数组: int maze[5][ ...

  5. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  6. 信息学奥赛一本通超详细题解,动画图文题解

    内容来源于微信公众号:大神编程.已经过原文作者授权. 更新时间:2020-11-5 现在开始更新基础算法题. 个人感言:从未见过如此详细的题解,动画.图文结合,适合任何水平的选手.尤其是特别适合自学的 ...

  7. 信息学奥赛一本通:1219.马走日

    信息学奥赛一本通:1219.马走日 1219:马走日 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 7406 通过数: 3863 [题目描述] 马在中国象棋以日字形规则移动. 请 ...

  8. 信息学奥赛一本通 1255:迷宫问题 | OpenJudge NOI 2.5 7084:迷宫问题

    [题目链接] ybt 1255:迷宫问题 OpenJudge NOI 2.5 7084:迷宫问题 [题目考点] 1. 广搜 迷宫问题 输出走出迷宫的路径 [解题思路] 1. 广搜解迷宫问题 广搜,迷宫 ...

  9. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

最新文章

  1. DeepID2:Deep Learning Face Representation by Joint Identification-Verification
  2. vsCode 开发微信小程序插件
  3. ABAP 使用DYNP_VALUES_READ来获取屏幕字段值
  4. python语言编写的modbus协议_RTU Modbus从机的python脚本
  5. HTML郑州宅急送试题
  6. Spring : Spring Aop 创建代理
  7. 修改cas5成功html文件,手把手教Apereo CAS5.2.3 Server端 增量开发 自定义登录页,增加验证码,注册,修改密码等功能的方式...
  8. Java面试题:程序计数器为什么是私有的?
  9. 软件需求工程与UML建模第十二周作业
  10. url 获取 geoserver 中对应的style
  11. 固态硬盘用软件测试掉速严重,分析固态硬盘掉速原因及解决方法
  12. NuGet是什么?为什么.NET项目中会有NuGet?如何使用NuGet程序包?
  13. QListWidget动态添加内容,交换两行内容
  14. 西安三本计算机专业可报院校,西安三本大学前十名, 西北大学现代学院仅第四...
  15. C语言冒泡法输出成绩与学号,C语言:根据成绩进行冒泡排序,学号也得跟着动,输出的结果...
  16. android zooming bitmap
  17. JavaScript数据类型基本数据类型与引用数据类型的区别
  18. 中国历史朝代及皇帝简介
  19. 几何画板年终大促倒计时,别错过!
  20. 获取手机通讯录加好友

热门文章

  1. 我希望早几年知道的5个Unix命令
  2. ArcGIS Server 10 for java 注册SOE出现的问题
  3. webservice 心得
  4. jquery插件制作 -- 3.表单验证
  5. 网易云音乐评论催泪刷屏?我用Python抓取了1008328条热评告诉你为什么!
  6. 在vue文件引入echarts_vue文件中使用echarts.js的两种方式
  7. 「面试」美团肝了我30+问题
  8. 解析OpenShift的存储规划
  9. Angular4+AdminLTE+Jeecg 前后端分离框架实战-张代浩-专题视频课程
  10. SpringBoot2.0 整合 QuartJob ,实现定时器实时管理