总时间限制: 
1000ms

内存限制: 
65536kB
描述
一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。
给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。
输入
第一行是两个整数,R和C,代表迷宫的长和宽。( 1<= R,C <= 40)
接下来是R行,每行C个字符,代表整个迷宫。
空地格子用'.'表示,有障碍物的格子用'#'表示。
迷宫左上角和右下角都是'.'。
输出
输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。计算步数要包括起点和终点。
样例输入
  1. 5 5
  2. ..###
  3. #....
  4. #.#.#
  5. #.#.#
  6. #.#..
样例输出
  1. 9
  2.  
  3. 、、虽然水了点但为了为走上歧途的同学解答
    还是写了题解,这大概是第一次写dfs的题解。。。。。
  4.  
  5. 首先看到这题的第一反应不应该是dfs(反正我第一个想到的是dp
    不过既然要dfs
    那就好好看看吧
    首先发现数据十分水
    所以不要记忆化
    不要记忆化的代码是令人愉悦的
    所以就开动了
    首先是状态数组,bool b【】【】
    把‘’0‘’作为‘’墙‘’
    在输入时直接处理好
    然后我们发现可以上下左右乱爬
    那写四个if????
    我有点恐惧,所以最好使用方向数组mapp【】【】
    做好可爱的回溯后就是简单的优化
    比如当我们发现k(目前步数)已经大于记录的最小步了
    那就直接give out it
    所以。。。。上代码吧
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. char c;
  4. int ans=0x7fffff,m,n;
  5. bool b[][];
  6. int mapp[][];
  7. void dfs(int x,int y,int k)
  8. {
  9. if(x==m&&y==n)
  10. {
  11. ans=min(ans,k);
  12. return ;
  13. }
  14. if(k>ans)
  15. return ;
  16. for(int i=;i<=;i++)
  17. {
  18. if(b[x+mapp[][i]][y+mapp[][i]]==){
  19. b[x+mapp[][i]][y+mapp[][i]]=;
  20. dfs(x+mapp[][i],y+mapp[][i],k+);
  21. b[x+mapp[][i]][y+mapp[][i]]=;
  22. }
  23. }
  24. }
  25. int main()
  26. {
  27. cin>>m>>n;
  28. mapp[][]=-;mapp[][]=;
  29. mapp[][]=;mapp[][]=;
  30. mapp[][]=;mapp[][]=;
  31. mapp[][]=;mapp[][]=-;
  32. for(int i=;i<=m;i++)
  33. for(int j=;j<=n;j++){
  34. cin>>c;
  35. if(c=='#')
  36. b[i][j]=;
  37. else
  38. b[i][j]=;
  39. }
  40. dfs(,,);
  41. cout<<ans;
  42. }
  1.  

//终于水完这题了。。。

//恩,那就这样吧。。。。(表示懒,不想记忆化)

  1.  

2753:走迷宫(dfs+初剪)//可以说是很水了。。。的更多相关文章

  1. NYOJ306 走迷宫(dfs+二分搜索)

    题目描写叙述 http://acm.nyist.net/JudgeOnline/problem.php?pid=306 Dr.Kong设计的机器人卡多非常爱玩.它经常偷偷跑出实验室,在某个游乐场玩之不 ...

  2. luogu P1238 走迷宫--DFS模板好(水)题

    题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...

  3. openjudge走迷宫(DFS)

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

  4. 走迷宫(DFS)

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

  5. sdut1269 走迷宫(dfs)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1269 连着做了三个基本的dfs,终于弄懂了搜索 ...

  6. HDU_1010——小狗走迷宫DFS

    Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. However, ...

  7. sdut 2449走迷宫【最简单的dfs应用】

    走迷宫 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_ 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m) ...

  8. HDU 2102 A计划(BFS/DFS走迷宫)

    A计划 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  9. 数据结构之 栈与队列--- 走迷宫(深度搜索dfs)

    走迷宫 Time Limit: 1000MS Memory limit: 65536K 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方 ...

随机推荐

  1. Go语言入门:Hello world

    本文是「vangoleo的Go语言学习笔记」系列文章之一. 官网: http://www.vangoleo.com/go/go-hello-world/ 在上一篇文章你好,Go语言中,我们对Go语言的 ...

  2. 前端技术之:如何在Vue中使用clipboard.js复制服务端数据

    第一步 创建点击对象页面元素,并绑定业务数据. <el-button type="text" size="mini" class="copy-b ...

  3. ie浏览器兼容性的入门解决方案

    IE浏览器的兼容性素来是令人头疼的问题,大名鼎鼎的FUCK-IE不是浪得虚名的. 这里使用的解决方案是HACK,具体原理就是针对不同的浏览器写不同的HTML.CSS样式,从而使各种浏览器达到一致的渲染 ...

  4. python学习之【第三篇】:Python中的字符串及其所具有的方法

    1.前言 字符串str是Python中最常用的数据类型.我们可以使用单引号''或双引号""包裹一段字符来创建字符串. 2.字符串创建 str1 = 'hello world' st ...

  5. 奶牛邻居——treap+契比雪夫距离+并查集

    题目描述 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000)只奶牛,你会发现她们已经结成了几个“群”. 每只奶牛在吃草的时候有一个独一无二的位置坐标Xi,Yi(l≤Xi,Yi ...

  6. 一文学会Go语言

    go语言随手记 -- go语言定位于高并发服务端程序 1.基本数据类型 boolstringint int8 int16 int32 int64uint uint8 uint16 uint32 uin ...

  7. 文字转换为svg动画

    将输入文本根据使用字体转化为描边动画. 详情请看git https://oubenruing.github.io/svg-text-animate/

  8. 003.Kubernetes二进制部署准备

    一 前置准备 1.1 前置条件 相应的充足资源的Linux服务器: 设置相应的主机名,参考命令: hostnamectl set-hostname k8smaster Mac及UUID唯一: 若未关闭 ...

  9. [LINQ2Dapper]最完整Dapper To Linq框架(五)---查看Linq实际执行的SQL

    此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper支持.net framework4.6.1及 ...

  10. java多线程回顾2:生命周期与控制

    1.  线程生命周期概述 线程的生命周期如下图: 2.  新建与就绪 当程序使用new关键字创建一个线程之后,线程就处于新建状态了.此时线程只是被分配了内存资源,初始化了成员变量. 当线程对象被调用了 ...