1252:走迷宫

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

【题目描述】

一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。

给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。

【输入】

第一行是两个整数,R和C,代表迷宫的长和宽。( 1<= R,C <= 40)

接下来是R行,每行C个字符,代表整个迷宫。

空地格子用‘.’表示,有障碍物的格子用‘#’表示。

迷宫左上角和右下角都是‘.’。

【输出】

输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。计算步数要包括起点和终点。

【输入样例】

5 5
..###
#....
#.#.#
#.#.#
#.#..

【输出样例】

9

【分析】

典型的迷宫问题,四个方向探索,从(1,1)探索到(n,m)。

【参考代码】

#include <iostream>
#include <queue>using namespace std;const int N=110;
struct point
{int x,y;  //坐标 int step; //步数
};
char a[N][N];         //(1,1)开始地图
int vis[N][N];        //访问数组
int m,n;              //迷宫行数和列数
int startx,starty;    //入口坐标
int decx,decy;        //出口坐标
int dx[4]={0,1,0,-1}; //方向数组,右,下,左,上
int dy[4]={1,0,-1,0};void bfs()
{queue <point> r;  //申请队列point start;      //初始化队列 start.x=startx;start.y=starty;start.step=1;r.push(start);           //起点入队 vis[startx][starty]=1;while(!r.empty())        //判断队列是否为空 {int x=r.front().x;   //获得队首元素int y=r.front().y;if(x==decx && y==decy){cout << r.front().step;}for(int i=0;i<4;i++)   //四个方向扩展{int nx,ny;nx=x+dx[i];ny=y+dy[i];if(a[nx][ny]=='.' && vis[nx][ny]==0)  //判断能不能走 {point temp;temp.x=nx;temp.y=ny;temp.step=r.front().step+1;r.push(temp);        //入队vis[nx][ny]=1;       // 标记 }}r.pop();}
}int main()
{cin >> n >> m;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin >> a[i][j];startx=1;starty=1;decx=n;decy=m;bfs();return 0;
}

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

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

  1. 信息学奥赛一本通 1252:走迷宫 | OpenJudge NOI 2.5 2753:走迷宫

    [题目链接] ybt 1252:走迷宫 OpenJudge NOI 2.5 2753:走迷宫 [题目考点] 1. 广搜 迷宫问题 [解题思路] 设结构体类型的结点保存位置以及步数,队列中保存的是该结构 ...

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

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

  3. 信息奥赛一本通《走迷宫》

    3752:走迷宫 查看提交统计提示提问 总时间限制:  1000ms  内存限制:  65536kB 描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走. 给定一个迷 ...

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

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

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

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

  6. 经典问题的另类解法——以信息学奥赛一本通c++版1216红与黑为例

    题目链接:信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn) 题目描述: 有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动 ...

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

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

  8. [信息学奥赛一本通][POJ 2251]地牢大师

    来源:<信息学奥赛一本通> , POJ 2251 算法标签 BFS 题目描述 你现在被困在一个三维地牢中,需要找到最快脱离的出路! 地牢由若干个单位立方体组成,其中部分不含岩石障碍可以直接 ...

  9. 信息学奥赛一本通 第五版(C++版)

    信息学奥赛一本通 第五版(C++版)第一部分 C++语言 第一章 C++语言入门 第二节 C++语言程序设计 P15 1. 编写一个能够输出Hello,World!的程序,这个程序常常作为一个初学者接 ...

  10. 信息学奥赛一本通(C++版)NOIP提高组(1820-1829)

    信息学奥赛一本通(C++版)NOIP提高组目录 //1820 [题目描述] 我们可以用这样的方式来表示一个十进制数:将每个阿拉伯数字乘以一个以该数字所 处位置的(值减1)为指数,以10为底数的幂之和的 ...

最新文章

  1. 深入浅出 Java Concurrency (29): 线程池 part 2 Executor 以及Executors[转]
  2. 面完字节跳动,才知道自己的数据结构与算法有多薄弱...
  3. 探秘Spring AOP (六) Spring AOP 实现原理 1
  4. Linux——JDK的部署
  5. spring boot http status 400_kubernetes configmap 热更新spring-boot应用
  6. mysql中毫秒的保存类型
  7. 理解CSRF(跨站请求伪造)
  8. vs2013 旗舰版 密钥
  9. 日语入门选什么书好?
  10. 阿里云服务器租用测试
  11. Java开发工程师大厂面试常见问题总结(应届生版)
  12. 群晖黑科技docker套件_群晖Docker玩法
  13. WSA无法调用GPU跑分解决方法
  14. Debian添加自启动的两种方式
  15. sql server线程等待信息
  16. 非参数统计:两样本和多样本的Brown-Mood中位数检验;Wilcoxon(Mann-Whitney)秩和检验及有关置信区间;Kruskal-Wallis秩和检验
  17. iOS:创建Siri 功能
  18. QQ宠物吹泡泡游戏小助手 VC++6.0代码分析
  19. png 微软ppt 透明度,教你一招永久搞定PPT导出高清图片的小技巧
  20. OneFlow 如何做静态图的算子对齐任务

热门文章

  1. 设置笔记笔触摸区(Vista)
  2. 手把手教你用ECharts画折线图
  3. 手把手教你做用户画像:3种标签类型、8大系统模块
  4. 干货收藏!Python完整代码带你一文看懂抽样
  5. mysql必须安装在c盘吗_家用冷热水管保温棉必须装吗?水管保温棉选购及安装攻略分享...
  6. 10个人有9个答错,另外1个只对一半:数据库的锁,到底锁的是什么?
  7. InnoDB自增原理都搞不清楚,还怎么CRUD?
  8. 58到家运维专家杨经营:业务上云后运维平台的演进之路
  9. 左耳朵耗子:15条有效提高编程的小贴士
  10. 为什么谷歌要执行严格的代码编写规范