2753:走迷宫(dfs+初剪)//可以说是很水了。。。
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
- 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。
给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。 - 输入
- 第一行是两个整数,R和C,代表迷宫的长和宽。( 1<= R,C <= 40)
接下来是R行,每行C个字符,代表整个迷宫。
空地格子用'.'表示,有障碍物的格子用'#'表示。
迷宫左上角和右下角都是'.'。 - 输出
- 输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。计算步数要包括起点和终点。
- 样例输入
-
5 5
..###
#....
#.#.#
#.#.#
#.#.. - 样例输出
-
9 、、虽然水了点但为了为走上歧途的同学解答
还是写了题解,这大概是第一次写dfs的题解。。。。。 首先看到这题的第一反应不应该是dfs(反正我第一个想到的是dp)
不过既然要dfs的
那就好好看看吧
首先发现数据十分水
所以不要记忆化
不要记忆化的代码是令人愉悦的
所以就开动了
首先是状态数组,bool b【】【】
把‘’0‘’作为‘’墙‘’
在输入时直接处理好
然后我们发现可以上下左右乱爬
那写四个if????
我有点恐惧,所以最好使用方向数组mapp【】【】
做好可爱的回溯后就是简单的优化
比如当我们发现k(目前步数)已经大于记录的最小步了
那就直接give out it!
所以。。。。上代码吧#include<bits/stdc++.h>
using namespace std;
char c;
int ans=0x7fffff,m,n;
bool b[][];
int mapp[][];
void dfs(int x,int y,int k)
{
if(x==m&&y==n)
{
ans=min(ans,k);
return ;
}
if(k>ans)
return ;
for(int i=;i<=;i++)
{
if(b[x+mapp[][i]][y+mapp[][i]]==){
b[x+mapp[][i]][y+mapp[][i]]=;
dfs(x+mapp[][i],y+mapp[][i],k+);
b[x+mapp[][i]][y+mapp[][i]]=;
}
}
}
int main()
{
cin>>m>>n;
mapp[][]=-;mapp[][]=;
mapp[][]=;mapp[][]=;
mapp[][]=;mapp[][]=;
mapp[][]=;mapp[][]=-;
for(int i=;i<=m;i++)
for(int j=;j<=n;j++){
cin>>c;
if(c=='#')
b[i][j]=;
else
b[i][j]=;
}
dfs(,,);
cout<<ans;
}//终于水完这题了。。。
//恩,那就这样吧。。。。(表示懒,不想记忆化)
2753:走迷宫(dfs+初剪)//可以说是很水了。。。的更多相关文章
- NYOJ306 走迷宫(dfs+二分搜索)
题目描写叙述 http://acm.nyist.net/JudgeOnline/problem.php?pid=306 Dr.Kong设计的机器人卡多非常爱玩.它经常偷偷跑出实验室,在某个游乐场玩之不 ...
- luogu P1238 走迷宫--DFS模板好(水)题
题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...
- openjudge走迷宫(DFS)
题目: 描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走. 给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到).只能在水平方向或垂直方向走,不 ...
- 走迷宫(DFS)
题目:http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2449&cid=1181 目前dfs 里的递归还是不很懂,AC代码如下: #incl ...
- sdut1269 走迷宫(dfs)
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1269 连着做了三个基本的dfs,终于弄懂了搜索 ...
- HDU_1010——小狗走迷宫DFS
Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. However, ...
- sdut 2449走迷宫【最简单的dfs应用】
走迷宫 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_ 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m) ...
- HDU 2102 A计划(BFS/DFS走迷宫)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 数据结构之 栈与队列--- 走迷宫(深度搜索dfs)
走迷宫 Time Limit: 1000MS Memory limit: 65536K 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方 ...
随机推荐
- leetcode算法小题(1)
题目描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数 ...
- 微信App支付 --- NodeJs
引包: "dependencies": { "crypto": "^1.0.1", "express": "^ ...
- mock和axios常见的传参方式
第一次接手项目,传参方式还有些吃力,因此做一下总结. 首先我们需要会看swagger中的接口.里面写了某个接口需要接收什么样的值,前端怎么传递这个值 在mock中的传参方式: mock中传参的方式有两 ...
- git log 附加命令归纳
git查看历史记录的时候查看每次提交的内容差异: git log -p git限制显示的条数 : git log -p -2 [-2] git简单显示每次提交做了哪些改动: git log --sta ...
- MIT线性代数:10.4个基本子空间
- 网络安全-主动信息收集篇第二章-三层网络发现之ping
第三层网络扫描基于TCP/IP.ICMP协议. 优点:可路由.速度比较快 缺点:相对于二层网络扫描较慢,容易被边界防火墙过滤 所有扫描发现技术,都会有相应的对抗办法,所以无论是来自二层的网络扫描还是来 ...
- [考试反思]0828NOIP模拟测试32:沉底
,,190,180,170,170... 倒数第6,75. 啊...再这么下去要失去理想了... 开学翘课停课以来的第一场考试,就考成这鬼模样. 本来还可以凭借那几次高分苟在公共卷总分的第2,这一场直 ...
- JavaScript中继承的实现方法--详解
最近看<JavaScript王者归来>中关于实现继承的方法,做了一些小总结: JavaScript中要实现继承,其实就是实现三层含义:1.子类的实例可以共享父类的方法:2.子类可以覆盖父类 ...
- centos7 yum 安装 mysql5.7
1.查看系统中是否已安装 MySQL 服务,以下提供两种方式: rpm -qa | grep mysqlyum list installed | grep mysql 2.如果已安装则删除 MySQL ...
- Unity 横版2D移动跳跃问题——关于一段跳与二段跳
1.初始条件: 1.角色只绑定一个碰撞体,移动时施加力或给予速度,用跳跃次数JumpTimes或者bool值OnGround判断是否在地面. 2.只用一个tilemap搭建2D场景,因此所有tilem ...