一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道。

看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头君是否有可以逃出去的路。

输入格式

第一行输入两个整数n 和 m,表示这是一个 n×m 的迷宫。

接下来的输入一个 n 行 m 列的迷宫。其中 'S' 表示蒜头君的位置,'*'表示墙,蒜头君无法通过,'.'表示路,蒜头君可以通过'.'移动,'T'表示迷宫的出口(蒜头君每次只能移动到四个与他相邻的位置——上,下,左,右)。

输出格式

输出一个字符串,如果蒜头君可以逃出迷宫输出"yes",否则输出"no"

数据范围

1≤n,m≤10。

输出时每行末尾的多余空格,不影响答案正确性

样例输入

  1. 3 4
  2. S**.
  3. ..*.
  4. ***T

样例输出

  1. no

样例输入

  1. 3 4
  2. S**.
  3. ....
  4. ***T

样例输出

  1. yes
  1. 1 #include<iostream>
  2. 2 using namespace std;
  3. 3 int n,m,beginx,beginy;
  4. 4 bool mark[11][11]={false};
  5. 5 char map[11][11];
  6. 6 int x[4]={0,-1,1,0},y[4]={-1,0,0,1};
  7. 7 bool flag=false;
  8. 8 bool check(int r,int c){
  9. 9 if (r>=0&&r<n&&c>=0&&c<m)
  10. 10 return true;
  11. 11 return false;
  12. 12 }
  13. 13 void DFS(int r,int c){
  14. 14
  15. 15 int newx,newy;
  16. 16 for (int i = 0; i < 4; i++)
  17. 17 {
  18. 18 newx = r +x[i];
  19. 19 newy = c + y[i];
  20. 20 if (check(newx,newy)&&!mark[newx][newy])
  21. 21 {
  22. 22 mark[newx][newy]=true;
  23. 23 if (map[newx][newy]=='T')
  24. 24 {
  25. 25 flag=true;
  26. 26 cout<<"yes"<<endl;
  27. 27 return;
  28. 28 }
  29. 29 if (map[newx][newy]=='.')
  30. 30 {
  31. 31 mark[newx][newy]=true;
  32. 32 DFS(newx,newy);
  33. 33 // cout<<"newx = "<<newx<<" newy ="<<newy<<endl;
  34. 34 }
  35. 35 }
  36. 36 }
  37. 37 }
  38. 38 int main(){
  39. 39 cin>>n>>m;
  40. 40 for (int i = 0; i < n; i++)
  41. 41 {
  42. 42 cin>>map[i];
  43. 43 for (int j = 0; j < m; j++)
  44. 44 {
  45. 45 if (map[i][j]=='S')
  46. 46 {
  47. 47 beginx= i;
  48. 48 beginy=j;
  49. 49 }
  50. 50 }
  51. 51 }
  52. 52 mark[beginx][beginy];
  53. 53 DFS(beginx,beginy);
  54. 54 if (!flag)
  55. 55 {
  56. 56 cout<<"no"<<endl;
  57. 57 }
  58. 58
  59. 59 }

DFS与DFS迷宫问题的更多相关文章

  1. (DFS)P1605 迷宫 洛谷

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  2. dfs题型二(迷宫问题)

    取自:<王道论坛计算机考研机试指南>6.5节 例 6.7 Temple of the bone(九度 OJ 1461)时间限制:1 秒 内存限制:32 兆 特殊判题:否题目描述:The d ...

  3. 【DFS】NYOJ-82 迷宫寻宝(一)-条件迷宫问题

    [题目链接:NYOJ-82] #include<iostream> #include<cstring> using namespace std; struct node{ in ...

  4. 看似不是dfs的dfs HDU-1455

    Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  5. 走迷宫(DFS)

    题目:http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2449&cid=1181 目前dfs 里的递归还是不很懂,AC代码如下: #incl ...

  6. HDOJ(1010)DFS+剪枝

    Tempter of the Bone http://acm.hdu.edu.cn/showproblem.php?pid=1010 #include <stdio.h> #include ...

  7. DFS(深度优先)算法编程实践

    DFS定义 DFS(Depth-First-Search)深度优先搜索算法,是搜索算法的一种.是一种在开发爬虫早期使用较多的方法.它的目的是要达到被搜索结构的叶结点 . 特点 每次深度优先搜索的结果必 ...

  8. 关于dfs

    DFS 关于dfs,我的理解就是深度搜索,找到所有与入口相连的路径,可以用于迷宫求出口,利用递归的思想,进行搜索返回所有值. 比如,给你两个值分别表示迷宫的长和宽,迷宫有一个入口,一个出口,判断能否从 ...

  9. 搜索入门_简单搜索bfs dfs大杂烩

    dfs题大杂烩 棋盘问题  POJ - 1321 和经典的八皇后问题一样.  给你一个棋盘,只有#区域可以放棋子,同时同一行和同一列只能有一个棋子. 问你放k个棋子有多少种方案. 很明显,这是搜索题. ...

随机推荐

  1. linux service脚本

    vim /etc/systemd/system/node_exporter.service [Unit] Description=node_exporter Documentation=https:/ ...

  2. 【原创】利用“进程注入”实现无文件不死webshell

    引子 上周末,一个好兄弟找我说一个很重要的目标shell丢了,这个shell之前是通过一个S2代码执行的漏洞拿到的,现在漏洞还在,不过web目录全部不可写,问我有没有办法搞个webshell继续做内网 ...

  3. Qt列表等控件实现平滑滚动&deepin启动器存在的问题

    Qt列表等控件实现平滑滚动 Qt自带的的列表控件是不能平滑滚动的,但如果滚动速度快的话很容易引起视线丢失,体验效果很差.本篇主要讲述如何在Qt中对列表控件加入平滑滚动.文中以QScrollArea控件 ...

  4. Ubuntu安装arm-linux-gcc 步骤

    文章目录 1.获取压缩包 2.解压 压缩包到指定路径 3.新建目录,解放目录权限 4.复制到新目录 5.配置环境变量和库变量 6.使用source命令重新加载生效该配置文件 7.验证 gcc编译的只能 ...

  5. 对象池在 .NET (Core)中的应用[1]: 编程体验

    借助于有效的自动化垃圾回收机制,.NET让开发人员不在关心对象的生命周期,但实际上很多性能问题都来源于GC.并不说.NET的GC有什么问题,而是对象生命周期的跟踪和管理本身是需要成本的,不论交给应用还 ...

  6. 解密优酷智能生产技术,看 AI 赋能内容数字化

    2021 年,随着社会节奏的加快,用户碎片化消费时间不断增加,当前短视频的消费用户规模已超 7.73 亿人,短视频的市场规模超过 2000 亿元.短视频行业发展迅速,但也存在低质内容泛滥,精品内容稀缺 ...

  7. webGis概念

    参考:https://blog.csdn.net/qq_36375770/article/details/80077533 参考:https://blog.csdn.net/BuquTianya/ar ...

  8. Go版本依赖--伪版本

    目录 1.简介 2. 什么是伪版本 3. 伪版本风格 4. 如何获取伪版本 1.简介 在go.mod中通常使用语义化版本来标记依赖,比如v1.2.3.v0.1.5等.因为go.mod文件通常是go命令 ...

  9. 源码解析.Net中DependencyInjection的实现

    前言 笔者的这篇文章和上篇文章思路一样,不注重依赖注入的使用方法,更加注重源码的实现,我尽量的表达清楚内容,让读者能够真正的学到东西.如果有不太清楚依赖注入是什么或怎么在.Net项目中使用的话,请点击 ...

  10. go defer关键字使用规则

    defer 用于延迟函数的调用,每次defer都会把一个函数压入栈中,函数返回前再把延迟的函数取出并执行 数据结构 type _defer struct { sp uintptr //函数栈指针 pc ...