1.链接地址:

http://bailian.openjudge.cn/practice/2790/

2.题目:

总时间限制:
3000ms
内存限制:
65536kB
描述
一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(或者说上 下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。如果起点或者终点有一个不能通行(为#),则 看成无法办到。
输入
第1行是测试数据的组数k,后面跟着k组输入。每组测试数据的第1行是一个正整数n (1 <= n <= 100),表示迷宫的规模是n * n的。接下来是一个n * n的矩阵,矩阵中的元素为.或者#。再接下来一行是4个整数ha, la, hb, lb,描述A处在第ha行, 第la列,B处在第hb行, 第lb列。注意到ha, la, hb, lb全部是从0开始计数的。
输出
k行,每行输出对应一个输入。能办到则输出“YES”,否则输出“NO”。
样例输入
  1. 2
  2. 3
  3. .##
  4. ..#
  5. #..
  6. 0 0 2 2
  7. 5
  8. .....
  9. ###.#
  10. ..#..
  11. ###..
  12. ...#.
  13. 0 0 4 0
样例输出
  1. YES
  2. NO

3.思路:广搜,注意起点和终点如果不通则直接为NO

4.代码:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <queue>
  4.  
  5. using namespace std;
  6.  
  7. struct POINT
  8. {
  9. int x;
  10. int y;
  11. };
  12.  
  13. int idx_x[] = {-,,,};
  14. int idx_y[] = {,,,-};
  15.  
  16. int main()
  17. {
  18. //freopen("C://input.txt","r",stdin);
  19.  
  20. int i,j;
  21.  
  22. int k;
  23. cin >> k;
  24.  
  25. while(k--)
  26. {
  27. int n;
  28. cin >> n;
  29.  
  30. bool **arr = new bool*[n];
  31. for(i = ; i < n; ++i) arr[i] = new bool[n];
  32.  
  33. char ch;
  34. for(i = ; i < n; ++i)
  35. {
  36. for(j = ; j < n; ++j)
  37. {
  38. cin >> ch;
  39. if(ch == '.') arr[i][j] = true;
  40. else arr[i][j] = false;
  41. }
  42. }
  43.  
  44. int ha,la,hb,lb;
  45. cin >> ha >> la >> hb >> lb;
  46.  
  47. if(arr[ha][la] == false || arr[hb][lb] == false) {cout << "NO" << endl; continue;}
  48. queue<POINT> q_point;
  49. POINT point;
  50. point.x = la;
  51. point.y = ha;
  52. q_point.push(point);
  53. arr[point.y][point.x] = false;
  54.  
  55. bool flag = false;
  56. while(!q_point.empty())
  57. {
  58. point = q_point.front();
  59. q_point.pop();
  60. for(i = ; i < ; ++i)
  61. {
  62. POINT p2;
  63. p2.x = point.x + idx_x[i];
  64. p2.y = point.y + idx_y[i];
  65.  
  66. if(p2.y == hb && p2.x == lb) {flag = true;break;}
  67. else if(p2.x >= && p2.x < n && p2.y >= && p2.y < n && arr[p2.y][p2.x])
  68. {
  69. q_point.push(p2);
  70. arr[p2.y][p2.x] = false;
  71. }
  72. }
  73. if(i < ) break;
  74. }
  75. if(flag) cout << "YES" << endl;
  76. else cout << "NO" << endl;
  77.  
  78. for(i = ; i < n; ++i) delete [] arr[i];
  79. delete [] arr;
  80. }
  81.  
  82. return ;
  83. }

OpenJudge 2790 迷宫的更多相关文章

  1. NOI openjudge 1792.迷宫

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

  2. openjudge走迷宫(DFS)

    题目: 描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走. 给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到).只能在水平方向或垂直方向走,不 ...

  3. DFS与BFS——理解简单搜索(中文伪代码+例题)

    新的方法和概念,常常比解决问题本身更重要. ————华罗庚 引子 深度优先搜索(Deep First Search) 广度优先搜索(Breath First Search) 当菜鸟们(比如我)初步接触 ...

  4. NOI / 2.5基本算法之搜索-6044:鸣人和佐助详解

    总时间限制: 1000ms 内存限制: 65536kB 题目 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到, ...

  5. Openjudge 2.5 6264:走出迷宫

    总时间限制:  1000ms 内存限制:  65536kB 描述 当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单. 假设你已经得到了一个n* ...

  6. 【OpenJ_Bailian - 2790】迷宫(bfs)

    -->迷宫  Descriptions: 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不 ...

  7. C语言动态走迷宫

    曾经用C语言做过的动态走迷宫程序,先分享代码如下: 代码如下: //头文件 #include<stdio.h> #include<windows.h>//Sleep(500)函 ...

  8. POJ 2251 Dungeon Master(3D迷宫 bfs)

    传送门 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28416   Accepted: 11 ...

  9. BFS_Maze_求解迷宫最短路径

    /* 10 10 #.######.# ......#..# .#.##.##.# .#........ ##.##.#### ....#....# .#######.# ....#..... .## ...

随机推荐

  1. Worker工作者进程

  2. JavaScript- The Good Parts Chapter 3 Objects

    Upon a homely object Love can wink.—William Shakespeare, The Two Gentlemen of Verona The simple type ...

  3. oracle 日期字段的处理

    a. oracle plsql 如何查询两个间隔日期之间的数据 1) 方法一:Select * from Tables where time >= to_date('2013-01-02 19: ...

  4. ThinkPHP3.1快速入门(2)数据CURD

    上一篇中,我们了解了ThinkPHP的基础部分,以及如何创建一个控制器和模板,并知道了M方法的用法,本篇将会讲解下数据的CURD操作,探索下更多的数据操作. CURD CURD是一个数据库技术中的缩写 ...

  5. int& a = b 的思考

    在PCL显示点云部分程序中,涉及到了如下程序 // 定义相关变量 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ptr (new pcl::Point ...

  6. 【转】Cocos2d-x纹理优化的一些方案——2013-08-26 22

    http://wap.oschina.net/question/565065_79814 在目前的移动平台游戏开发过程中,很多朋友会遇到开发出来的DEMO占用内存过大,导致渲染效率低下的问题.究其原因 ...

  7. windows 下 node 多版本管理工具 - gnvm

    最近写了各个构建工具, 开发环境为mac,需要在windows下测试通过: 因为很久不用windows,windows下的node 版本还是 0.10.* 的,因此决定升级node mac 下我使用的 ...

  8. VS的一部分快捷键

    快捷键                                         功能CTRL + SHIFT + B                        生成解决方案CTRL + F ...

  9. linux安装java环境

    在linux下安装JDK如下: 第一步:查看Linux自带的JDK是否已安装 (1)查看已经安装的jdk: [root@web-server ~]# rpm -qa|grep jdk ← 查看jdk的 ...

  10. %s 与 %0s在 verilog中的区别

    what is different between %s and %0s?(%s和%零s) %s prints the string as it is with spaces at the begin ...