迷宫

原题:传送门

题目描述 Description

在N*N的迷宫内,“#”为墙,“.”为路,“s”为起点,“e”为终点,一共4个方向可以走。从左上角((0,0)“s”)位置处走到右下角((n-1,n-1)“e”)位置处,可以走通则输出YES,不可以走则输出NO。

输入描述 Input Description

输入的第一行为一个整数m,表示迷宫的数量。 
其后每个迷宫数据的第一行为一个整数n(n≤16),表示迷宫的边长,接下来的n行每行n个字符,字符之间没有空格分隔。

输出描述
Output Description

输出有m行,每行对应的迷宫能走,则输出YES,否则输出NO。

样例输入
Sample Input

  1. 1
    7
    s...##.
    .#.....
    .......
    ..#....
    ..#...#
    ###...#
    ......e
样例输出 Sample Output
  1. YES
  2.  
  3. 解题思路:1.首先,题目要求很明确从左上角s能不能走到右下角e,其实起点和终点在哪里都无所谓,我们只需要找到一条路到达终点即可
    2.虽然很容易想到是深搜,但是不需要回溯(没说求出最短距离,可以自己练练),所以深搜时向4个方向都递归一次即可
    3.还需要设置一个标记数组mark,避免陷入死循环中(一直在转圈)
  4.  
  5. 核心代码:
  1. #include<iostream>
  2. using namespace std;
  3. char mi[][];
  4. int ma[][], mark = , ax, ay;
  5. int m, n;
  6. int z, j, haha;
  7.  
  8. void dfs(int x, int y)
  9. {
  10. if (mi[x][y] == 'e')
  11. {
  12. cout << "YES" << endl;
  13. mark = ;
  14. return;
  15. }
  16. if (x< || y< || x>n || y>n || mi[x][y] == '#' || ma[x][y] == )
  17. return;
  18. ma[x][y] = ;//不需要回溯,因为只需要找一种情况
  19. dfs(x + , y);
  20. dfs(x - , y);
  21. dfs(x, y + );
  22. dfs(x, y - );
  23. }
  24. int main()
  25. {
  26. cin >> m;
  27. for (int i = ; i <= m; i++)
  28. {
  29. cin >> n;
  30. for (j = ; j <= n; j++)
  31. for (z = ; z <= n; z++)
  32. {
  33. cin >> mi[j][z];
  34. }
  35. dfs(, );
  36. if (mark == )
  37. cout << "NO" << endl;
  38. }
  39. return ;
  40. }

CODEVS-1215迷宫的更多相关文章

  1. codevs 1215 迷宫

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k<n).从 n ...

  2. BFS简单题套路_Codevs 1215 迷宫

    BFS 简单题套路 1. 遇到迷宫之类的简单题,有什么行走方向的,先写下面的 声明 ; struct Status { int r, c; Status(, ) : r(r), c(c) {} // ...

  3. codevs——3344 迷宫

    3344 迷宫  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 小刚在迷宫内,他需要从A点出发,按顺序经过B, ...

  4. codevs 3344 迷宫

    时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题目描述 Description 小刚在迷宫内,他需要从A点出发,按顺序经过B,C,D……,到达最后一个点,再回到A ...

  5. Codevs 1337 银行里的迷宫

    1337 银行里的迷宫 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 传送门 题目描述 Description 楚楚每一次都在你的帮助下过了一关又一关(比如他开 ...

  6. Codevs 2855 游乐园的迷宫

    2855 游乐园的迷宫  时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 迷宫可是每个游乐园必不可少的项目,菜菜当然是要尝试一下啦. ...

  7. codevs——T1337 银行里的迷宫

     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题解       题目描述 Description 楚楚每一次都在你的帮助下过了一关又一关(比如他开宴会). ...

  8. Codevs 1629 01迷宫

    1629 01迷宫 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有一个由01组成的n*n格迷宫,若你位于一格0上,那么你可 ...

  9. 习题:codevs 2822 爱在心中 解题报告

    这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...

  10. codevs 2822 爱在心中

    codevs 2822 爱在心中  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description “每个人都拥有一个梦,即使彼此不相同, ...

随机推荐

  1. CF 990 Educational Codeforces Round 45

    既然补了就简单记录一下. 感觉还算有一点营养. 官方题解传送门:点我 A Commentary Boxes 对拆掉$n \mod m$个和新建$m - (n \mod m)$求个最小. #includ ...

  2. vs与qt

    http://blog.csdn.net/woniuye/article/details/54928477 1. #include "qmessagebox.h" QMessage ...

  3. Groovy使用List集合

    获取List集合中的元素 def lst = [1,3,4,1,8,9,2,6] println lst[-1] println lst[-2] 输出结果: 输出: 6 2 使用Range(范围)对象 ...

  4. VC获取网页标题,解决乱码问题 学习

    博主不让转载 仅记录下地址 稍后 放出自己的代码 http://blog.csdn.net/friendan/article/details/11821135

  5. radiobutton 选中的项不能去掉选择的问题

    代码如下: RadioButton rbtn = new RadioButton(getApplicationContext()); rbtn.setText(String.valueOf(item. ...

  6. Android Studio真机测试失败-----''No target device found"

    手机成功连接电脑,并且手机已经设置了开发者模式,但是启动真机还是失败,最后发现居然自己没有配置android sdk的环境变量,配置之后 如果还是不能启动,点击android studio上的tool ...

  7. io.fabric8.kubernetes对pv和pvc的增删查改

    1.新建maven项目k8stest,pom.xml如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns: ...

  8. Word直接发布新浪博客(以Word 2010为例)

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  9. 7、Docker Container

    7.1 什么是Container 通过image创建(copy) 在Image layer之上建立一个Container layer(可读写) 类比面向对象:类和实例 Image负责APP的存储和分发 ...

  10. FDMemTable三层提交数据总是不成功的原因

    提交数据的代码如下: procedure TForm1.btnSaveClick(Sender: TObject);var LDeltas: TFDJSONDeltas;begin if FDMemT ...