题目网址:http://acm.fzu.edu.cn/problem.php?pid=2285 Problem 2285 迷宫寻宝 Accept: 276 Submit: 1040 Time Limit: 1000 mSec Memory Limit : 32768 KB

Problem Description
洪尼玛今天准备去寻宝,在一个n*n (n行, n列)的迷宫中,存在着一个入口、一些墙壁以及一个宝藏。由于迷宫是四连通的,即在迷宫中的一个位置,只能走到与它直接相邻的其他四个位置(上、下、左、右)。现洪尼玛在迷宫的入口处,问他最少需要走几步才能拿到宝藏?若永远无法拿到宝藏,则输出-1。

Input
多组测试数据。

每组数据输入第一行为正整数n,表示迷宫大小。

接下来n行,每行包括n个字符,其中字符’.‘表示该位置为空地,字符’#'表示该位置为墙壁,字符’S’表示该位置为入口,字符’E’表示该位置为宝藏,输入数据中只有这四种字符,并且’S’和’E’仅出现一次。

Output
输出拿到宝藏最少需要走的步数,若永远无法拿到宝藏,则输出-1。

Sample Input

5
S.#…
#.#.#
#.#.#
#…E
#…

Sample Output
7


BFS入门题,思路见注释

这题我居然TLE了十多次
后来慢慢Debug,后来发现是输入的问题,scanf是格式化输入,cin是输入流,cin之所以效率低,是先把要输出的东西存入缓冲区,再输出,一般情况下满了才刷新的,所以导致效率降低,打ACM时遇到卡时间的题目需要注意一下!!!


    #include<iostream>#include<queue>#include<cstring>#include<cstdio>using namespace std;const int MAX = 1000;char maza[MAX][MAX];//记录迷宫int step[MAX][MAX];//记录步数int sx,sy,ex,ey;//记录起点和终点struct Point{int x;int y;} point1,point2;//记录当前位置和下一位置int dir[4][2]= {{0,1},{0,-1},{-1,0},{1,0}};//上下左右四个方向queue<Point> Q;//队列int main(){int n,flag;while(cin>>n){flag=0;while(!Q.empty())Q.pop();//清空队列memset(step,0,sizeof(step));//把记录步数的数组设为0for(int i=0;i<n;++i)scanf("%s",maza[i]);for(int i=0; i<n; ++i)for(int j=0; j<n; ++j){if(maza[i][j]=='S')sx=i,sy=j;if(maza[i][j]=='E')ex=i,ey=j;//遍历图形找到起点和终点}step[sx][sy]=1;//设起点为1表示已经被访问过point1.x=sx;point1.y=sy;Q.push(point1);//把起点添加到队列while(!Q.empty())//当队列不为空时进行循环查找队列{point1=Q.front();//拿出队列首元素Q.pop();//拿出后移除首元素for(int i=0; i<4; ++i){point2.x=point1.x+dir[i][0];point2.y=point1.y+dir[i][1];if( point2.x >= 0 && point2.y >= 0 && point2.x < n && point2.y < n && !step[point2.x][point2.y] && maza[point2.x][point2.y] != '#' ){//如果下一个节点不出边界,没被访问过且不是墙,则步数+1step[point2.x][point2.y]=step[point1.x][point1.y]+1;Q.push(point2);}}if(step[ex][ey]!=0){//找到出口flag=1;break;}}if(flag)cout<<step[ex][ey]-1<<endl;//因为起点为1,故需减去1则为步数elsecout<<-1<<endl;}return 0;}

Write by 0xcc 3/9/2019.

(FZU-2285-迷宫寻宝)BFS最短路径问题相关推荐

  1. nyoj82 迷宫寻宝(一) (bfs)

    迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编过号的门 ...

  2. 初识BFS POJ-3278 Catch That Cow FZU-2285 迷宫寻宝

    初识BFS POJ-3278 Catch That Cow FZU-2285 迷宫寻宝 令人窒息的创新实验课让我们写程序. POJ-3278 Catch That Cow Farmer John ha ...

  3. NYOJ 82:迷宫寻宝(一)(BFS)

    迷宫寻宝(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编过号 ...

  4. 搜索专题——迷宫寻宝

    原题链接:FZU-2285 题目描述: 描述:洪尼玛今天准备去寻宝,在一个n*n (n行, n列)的迷宫中,存在着一个入口.一些墙壁以及一个宝藏.由于迷宫是四连通的,即在迷宫中的一个位置,只能走到与它 ...

  5. 迷宫寻宝(自编简单版)

    nyoj - 迷宫寻宝(1) 我觉得有点难...我将其改简单一些. 题目描述:与原题基本差不多,但开门条件改一下,每个门只需要一把钥匙即可打开,一把钥匙可以开所有对应的门. 这样就简单很多啦...其实 ...

  6. 迷宫寻宝(一) 82

    /*迷宫寻宝(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编 ...

  7. 迷宫寻宝(宽度搜索)(C++)

    迷宫寻宝 题目 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,不限时间和步数,当然也没有陷阱,请你判断他能不能顺利的得到宝藏. 输入 多组输入 每组测试数据的第一行包含了两个整数M ...

  8. nyoj 81 迷宫寻宝

    迷宫寻宝(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编 ...

  9. NYOJ 迷宫寻宝(一)

    迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编过号的门 ...

最新文章

  1. 工控安全要避开传统IT安全思路的几个“暗坑”
  2. 给出一种符号表的组织方式和结构设计,要考虑数组类型和函数(不得与课件上的雷同)
  3. Celery中文翻译-Application
  4. 编译maven_头条一面竟然问我Maven?
  5. java运算符试题,编程语⾔⾯试题之新版javase基础语法篇之运算符
  6. php管道的概念,管道线的概念定义及分析技巧的讲解
  7. 【英语学习】【Level 07】U08 Old Stories L3 Lights, camera, action!
  8. textarea属性
  9. 计算机组成中CM,基于TDN-CM++计算机组成原理课程设计.doc
  10. 2021-03-05 网站资源数据搜集
  11. Linux运维从入门到进阶
  12. 分布式数据库核心原理
  13. 为IntelliJ IDEA安装EmmyLua插件
  14. 全网首发stm8s的硬件I2C读取bme280(bmp280)的C源程序
  15. [数论][高精度]Heaven Cow与God Bull
  16. 计算机网络原理(交换机,路由器详解)
  17. 一道经典SQL笔试题(求各部门最高薪水的部门名称、员工姓名以及薪水)
  18. uni-app个人中心
  19. 4G网络要升级成5G,换卡还是换手机?
  20. 疫情之后,SaaS的春天就来了吗?

热门文章

  1. 我所首席执行主任律师王杰接受《电脑报》记者采访就sp发展发表观点
  2. 小学生计算机课的演讲稿,小学生课前优秀演讲稿三分钟定稿(电子版)
  3. 电脑Win10 企业版如何激活
  4. June 18(th)
  5. cdm软件怎么测试硬盘,测试方法介绍、CDM性能对比测试
  6. python根据文本生成词云图
  7. 腾讯T3大牛亲自讲解!面试字节跳动Android研发岗,值得收藏!
  8. Android 4.0模拟器弹出---“谷歌拼音输入法”已停止运行的解决方法
  9. linux看内存插槽,Linux查看内存大小和插槽
  10. 百度搜索和百度信息流有什么区别?