题目:

题目:有一个n×mn × mn×m大小的迷宫,字符′S′'S'′S′表示起点,字符′T′'T'′T′表示终点, ′∗′' * '′∗′表示墙壁,字符 ′.′' . '′.′表示平地。求SSS到TTT的最少步数。
输入:
3 4
S**.

***T
输出:
5

思路:

第一个搜到的步数存入ans,如果当前步数大于ans,直接剪枝,否则更新ans

代码:

#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
int n,m;
string maze[110];
bool vis[110][110];
int dir[4][2]={{-1,0},{0,-1},{1,0},{0,1}};
int ans=100000;
bool in(int x,int y){return 0<=x&&x<n&&0<=y&&y<m;
}
void dfs(int x,int y,int step){if(step>=ans){return ;}if(maze[x][y]=='T'){ans=step;return ;}vis[x][y]=1;for(int i=0;i<4;++i){int tx=x+dir[i][0];int ty=y+dir[i][1];if(in(tx,ty)&&maze[tx][ty]!='*'&&!vis[tx][ty]){dfs(tx,ty,step+1);}}vis[x][y]=0;
}
int main() {cin>>n>>m;for(int i=0;i<n;++i){cin>>maze[i];}int x,y;for(int i=0;i<n;++i){for(int j=0;j<m;++j){if(maze[i][j]=='S'){x=i,y=j;}}}dfs(x,y,0);cout<<ans<<endl;return 0;
}

(dfs)迷宫最小步数相关推荐

  1. 带你学习BFS最小步数模型

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  2. 算法提高课-搜索-最小步数模型-AcWing 1107. 魔板:bfs、复杂、八数码类似的题目

    题目分析 来源:acwing 分析: 最小步数模型常用哈希 按照ABC的顺序来搜,得到的是字典序最小的. 这里整幅"图"是一个状态, 装进一个字符串中,然后一个状态改变到另一个状态 ...

  3. 算法提高课-搜索-最短路模型-AcWing 188. 武士风度的牛 :bfs、dist数组记录最小步数

    题目分析 来源:acwing 分析:马走日,这里用bfs遍历马的行走过程,输出到达终点的最小步数. 使用bfs求到每个点的最小步数,需要开一个dist[][]数组,来记录起点到某点的最小步数. 队列里 ...

  4. 堆栈思想案例—汉诺塔问题求解最小步数

    文章目录 前言 一.何为汉诺塔 二.问题分析 三.算法实现 前言 汉诺塔是一款有趣的智力游戏,其求解问题在数据结构与算法中也是堆栈思想和递归思想的典型案例. 一.何为汉诺塔 如图所示:有A.B.C三个 ...

  5. upc9520: Knight (象棋马从(0,0)到(n,m)的最小步数)

    题目描述 有一张无限大的棋盘,你要将马从(0,0)移到(n,m). 每一步中,如果马在(x,y),你可以将它移动到(x+1,y+2),(x+1,y−2),(x−1,y+2),(x−1,y−2),(x+ ...

  6. 正整数变成斐波那契数的最小步数

    题目描述 Fibonacci数列是这样定义的: F[0] = 0 F[1] = 1 for each i ≥ 2: F[i] = F[i-1] + F[i-2] 因此,Fibonacci数列就形如:0 ...

  7. C语言习题——使一个数字变为斐波那契数的最小步数

    题目: 链接:Fibonacci数列__牛客网 来源:牛客网 Fibonacci数列是这样定义的: F[0] = 0 F[1] = 1 for each i ≥ 2: F[i] = F[i-1] + ...

  8. BFS:走出迷宫并输出最小步数

    目录 背景 描述 例子 思路 完整代码 收获总结 背景 描述 给定一个n*m大小的迷宫,其中*代表不可通过的墙壁,而"."代表墙壁,S表示起点,T代表重点.移动过程中,如果当前位置 ...

  9. NYOJ ~ 58 ~ 最小步数(DFS)

    代码如下: #include<stdio.h> #include<iostream> #include<algorithm> #include<string. ...

最新文章

  1. Datawhale专访 | 周涛:从窄门进最终走出宽路来
  2. localhost❤matrix6
  3. 解决windows文件在linux系统中显示乱码的问题
  4. 解决prometheus k8s.gcr.io/addon-resizer:1.8.4镜像无法下载的问题
  5. 可能是世界上最简单的用 Go 来写 WebAssembly 的教程
  6. Java基础-通过反射获取类的信息
  7. 云消防大数据_消防云大数据app
  8. JDK_Proxy_InvocationHandler_动态代理
  9. SQL Server2008安装教程
  10. daemontools的安装、示例、简介
  11. 【C51】单片机芯片之——图解74HC595
  12. 【转】Arp的攻防实战
  13. UOJ Easy Round #8 T1 打雪仗 题解
  14. 《算法新解》作者刘新宇:我只是想打开那些黑盒子,告诉人们里面有什么。
  15. 生鲜电商平台-优惠券设计与架构
  16. 浏览器下载文件,读取BLOB字段会因为数据太大导致数据库连接connect超时关闭的解决方案...
  17. 【各大公司年会奖品清单】腾讯送直升飞机,网易与日女星度过美好的下午?...
  18. ElementUI图片上传 回显
  19. Android平台与Ios的对比
  20. AD2019 add Mechanical layer

热门文章

  1. Tensorflow C3D完成视频动作识别
  2. linux 删除node进程,关于node.js:杀死Linux中的节点进程
  3. Undefined control sequence. \makecover
  4. 西南民族大学计算机考试试题,西南民族大学预科教育学院 2007级《计算机》模拟试题(含答案)...
  5. php类的举例,用类来代替递归方法,用php举例_php _ 搞代码
  6. 阶乘取模算法java_np问题(大数阶乘取模)
  7. linux全过程图解图片,安装 Mandriva Linux全过程《图解》
  8. python中cmd如何切换盘_redis 中如何切换db
  9. js数字转中文大写支持负数
  10. 如何将单机版的Eureka服务改为集群版Eureka服务