信息学奥赛一本通(1254:走出迷宫)
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:走出迷宫)相关推荐
- 信息学奥赛一本通 1254:走出迷宫 | OpenJudge NOI 2.5 6264:走出迷宫
[题目链接] ybt 1254:走出迷宫 OpenJudge NOI 2.5 6264:走出迷宫 [题目考点] 1. 广搜 迷宫问题 [解题思路] 广搜,迷宫问题模板题. 当数据量很小时,用深搜的方法 ...
- 信息学奥赛一本通(1215:迷宫)
1215:迷宫 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 29437 通过数: 8772 [题目描述] 一天Extense在森林里探险的时候不小心走入 ...
- 【信息学奥赛一本通】1215:迷宫(bfs版)
[题目描述] 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n×n的格点组成,每个格点只有2种状态,'.'和'#',前者表示可以通行后者表示不能通行.同时当Extense处 ...
- 信息学奥赛一本通(1255:迷宫问题)
1255:迷宫问题 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 7919 通过数: 3656 [题目描述] 定义一个二维数组: int maze[5][ ...
- 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)
信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法 更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...
- 信息学奥赛一本通超详细题解,动画图文题解
内容来源于微信公众号:大神编程.已经过原文作者授权. 更新时间:2020-11-5 现在开始更新基础算法题. 个人感言:从未见过如此详细的题解,动画.图文结合,适合任何水平的选手.尤其是特别适合自学的 ...
- 信息学奥赛一本通:1219.马走日
信息学奥赛一本通:1219.马走日 1219:马走日 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 7406 通过数: 3863 [题目描述] 马在中国象棋以日字形规则移动. 请 ...
- 信息学奥赛一本通 1255:迷宫问题 | OpenJudge NOI 2.5 7084:迷宫问题
[题目链接] ybt 1255:迷宫问题 OpenJudge NOI 2.5 7084:迷宫问题 [题目考点] 1. 广搜 迷宫问题 输出走出迷宫的路径 [解题思路] 1. 广搜解迷宫问题 广搜,迷宫 ...
- 信息学奥赛一本通 (C++)上机练习
信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...
最新文章
- DeepID2:Deep Learning Face Representation by Joint Identification-Verification
- vsCode 开发微信小程序插件
- ABAP 使用DYNP_VALUES_READ来获取屏幕字段值
- python语言编写的modbus协议_RTU Modbus从机的python脚本
- HTML郑州宅急送试题
- Spring : Spring Aop 创建代理
- 修改cas5成功html文件,手把手教Apereo CAS5.2.3 Server端 增量开发 自定义登录页,增加验证码,注册,修改密码等功能的方式...
- Java面试题:程序计数器为什么是私有的?
- 软件需求工程与UML建模第十二周作业
- url 获取 geoserver 中对应的style
- 固态硬盘用软件测试掉速严重,分析固态硬盘掉速原因及解决方法
- NuGet是什么?为什么.NET项目中会有NuGet?如何使用NuGet程序包?
- QListWidget动态添加内容,交换两行内容
- 西安三本计算机专业可报院校,西安三本大学前十名, 西北大学现代学院仅第四...
- C语言冒泡法输出成绩与学号,C语言:根据成绩进行冒泡排序,学号也得跟着动,输出的结果...
- android zooming bitmap
- JavaScript数据类型基本数据类型与引用数据类型的区别
- 中国历史朝代及皇帝简介
- 几何画板年终大促倒计时,别错过!
- 获取手机通讯录加好友
热门文章
- 我希望早几年知道的5个Unix命令
- ArcGIS Server 10 for java 注册SOE出现的问题
- webservice 心得
- jquery插件制作 -- 3.表单验证
- 网易云音乐评论催泪刷屏?我用Python抓取了1008328条热评告诉你为什么!
- 在vue文件引入echarts_vue文件中使用echarts.js的两种方式
- 「面试」美团肝了我30+问题
- 解析OpenShift的存储规划
- Angular4+AdminLTE+Jeecg 前后端分离框架实战-张代浩-专题视频课程
- SpringBoot2.0 整合 QuartJob ,实现定时器实时管理