hdu1010
#include <stdio.h>
#include <string.h>
#include <math.h>
int n,m,t;
char map[10][10];
int flag;
int di,dj,wall;
int to[4][2] = {{0,-1},{0,1},{-1,0},{1,0}};
void dfs(int si,int sj,int cnt)//深搜
{
int i,tem;
if(si>n || sj>m || si<=0 || sj <= 0)//出界
return ;
if(cnt == t && si == di && sj == dj)//到达终点
flag = 1;
if(flag)
return ;
int s1 = si-di;
int s2 = sj-dj;
if(s1<0)
s1=-s1;
if(s2<0)
s2=-s2;
tem = t-cnt - s1 - s2;
if(tem<0 || tem&1)//看剩下的时间能能否到达终点,tem&1则是判断其是否偶数,根据LCY的奇偶性剪枝可得tem必须是偶数,是奇数则不行
return;
for(i = 0; i<4; i++)
{
if(map[si+to[i][0]][sj+to[i][1]]!='X')
{
map[si+to[i][0]][sj+to[i][1]]='X';//走过的地方变为墙
dfs(si+to[i][0],sj+to[i][1],cnt+1);
map[si+to[i][0]][sj+to[i][1]]='.';//迷宫还原,以便下次广搜
}
}
return ;
}
int main()
{
int i,j,si,sj;
while(~scanf("%d%d%d%*c",&n,&m,&t))
{
if(!n && !m && !t)
break;
wall = 0;
for(i = 1; i<=n; i++)
{
for(j = 1; j<=m; j++)
{
scanf("%c",&map[i][j]);
if(map[i][j] == 'S')
{
si = i;
sj = j;
}
else if(map[i][j] == 'D')
{
di = i;
dj = j;
}
else if(map[i][j] == 'X')
wall++;
}
getchar();
}
if(n*m-wall<=t)//t是代表要走的步数,步数加墙数必须小于总格子数的,因为所有格子中还包括了S和D,这是剪枝
{
printf("NO\n");
continue;
}
flag = 0;
map[si][sj] = 'X';//出发点是不可能再走的了,变为墙
dfs(si,sj,0);
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
hdu1010的更多相关文章
- HDU1010(bfs)
#include <stdio.h>#include <iostream>#include <string.h>#include <stdlib.h>u ...
- DFS练习-HDU1010
题目来源:HDU1010 DFS的基本原则已经差不多了,但是一些技巧仍然比较难想,所以还是加强练习,然后总结一下. 还是先看题意 ,指定迷宫的长,宽以及走出迷宫的具体时间N,M,T. 其中(1 < ...
- hdu1010 Tempter of the Bone —— dfs+奇偶性剪枝
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010 Tempter of the Bone Time Limit: 2000/1000 MS (Ja ...
- HDU1010 DFS+剪枝
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdu1010 dfs+奇偶性减枝
Tempter of the Bone Problem Description The doggie found a bone in an ancient maze, which fascinated ...
- 做HDU1010 带出来一个小问题
做1010 本来是想的DFS深搜 但是自己凭空打 打不出来 因为没有记模板 然后就去搜 但是看了一遍 自己打却又是有BUG 然后验证 就出现了一个二维字符数组打印的问题 开始代码是这 ...
- HDU1010 Tempter of the Bone
解题思路:相当经典的一题,回溯,具体细节处理见代码. #include<cstdio> #include<cstring> #include<algorithm> ...
- hdu-1010 dfs+剪枝
思路: 剪枝的思路参考博客:http://www.cnblogs.com/zibuyu/archive/2012/08/17/2644396.html 在其基础之上有所改进 题意可以给抽象成给出一个 ...
- 【奇偶剪枝】【HDU1010】Tempter of the Bone
题意:输入一个n*m的迷宫,和一个T:可以在迷宫中生存的最大时间.S为起点,D为终点.并且,每个格子只能踩一次,且只能维持一秒,然后该块地板就会塌陷.所以你必须每秒走一步,且到D点时,所用时间为T. ...
- ZOJ 2110 Tempter of the Bone(条件迷宫DFS,HDU1010)
题意 一仅仅狗要逃离迷宫 能够往上下左右4个方向走 每走一步耗时1s 每一个格子仅仅能走一次且迷宫的门仅仅在t时刻打开一次 问狗是否有可能逃离这个迷宫 直接DFS 直道找到满足条件的路径 ...
随机推荐
- vim 模式基础操作
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 前言 虽然Emacs已经可以完成大部分的编辑操作,但有时候为了方便也会用到vim.所以记录了 ...
- 微信小程序-scroll-view隐藏滚动条
在书写网页的时候,往往会为了页面的美观,而选择去掉滚动区域默认的滚动条,而在这里,就是为小程序去掉滚动条的其中的一种方法: scroll-view.wxml: scroll-view.wxss scr ...
- CentOS部署yum本地源和共享
约定yum本地源的机器IP为192.168.1.100,需要访问共享源的IP为192.168.1.101 关闭并禁止selinux和firewalld 创建本地源 1.上传centos7光盘镜像到指定 ...
- DuiLib 中滚动条不显示的问题
DuiLib 很好用,同时在没有完全理解源码的前提下,坑也不少,比如今天遇到的添加滚动条不显示... 情况是这样的,将一个页面作为Tab控件的其中一页,为了代码不窝在一起,就没有在CreateCont ...
- hadoop(二)
三 Hive和Hbase #安装配置Hbase环境#主要参考https://my.oschina.net/zc741520/blog/388718网站配置的是集群,这里是伪分布,将网站中涉及多个主机的 ...
- java四种xml解析区别
1.DOM解析 dom解析是根据树形结构解析,将整个文档加载到内存中,因此对内存的要求较高,所以可以对该文档数据进行多次操作(增,删,改,查). 2.SAX解析 SAX解析是根据事件模型解析,边读取文 ...
- 自定义报表开发(HTML/XML)
定义报表执行的包或存储过程: --创建包头 CREATE OR REPLACE PACKAGE XXPLM_AARONTEST001 IS PROCEDURE MAIN(errbuf OUT VARC ...
- Java 彩色图转灰度图
1. 方法1 BufferedImage grayImage = new BufferedImage(width, height, colorImage.TYPE_BYTE_GRAY); Graphi ...
- 使用 JUnit 报错 java.lang.Exception: No runnable methods
错误详情如下: java.lang.Exception: No runnable methods at org.junit.runners.BlockJUnit4ClassRunner.validat ...
- 【锋利的Jquery】读书笔记三
DOM操作 三个方面;DOM core html-dom css-dom 注意点: 删除事件中 三种删除节点的方法 remove detach empty remove不解释 de ...