HDOJ/HDU Tempter of the Bone(深搜+奇偶性剪枝)
Problem Description
The doggie found a bone in an ancient maze, which fascinated him a lot. However, when he picked it up, the maze began to shake, and the doggie could feel the ground sinking. He realized that the bone was a trap, and he tried desperately to get out of this maze.
The maze was a rectangle with sizes N by M. There was a door in the maze. At the beginning, the door was closed and it would open at the T-th second for a short period of time (less than 1 second). Therefore the doggie had to arrive at the door on exactly the T-th second. In every second, he could move one block to one of the upper, lower, left and right neighboring blocks. Once he entered a block, the ground of this block would start to sink and disappear in the next second. He could not stay at one block for more than one second, nor could he move into a visited block. Can the poor doggie survive? Please help him.
Input
The input consists of multiple test cases. The first line of each test case contains three integers N, M, and T (1 < N, M < 7; 0 < T < 50), which denote the sizes of the maze and the time at which the door will open, respectively. The next N lines give the maze layout, with each line containing M characters. A character is one of the following:
‘X’: a block of wall, which the doggie cannot enter;
‘S’: the start point of the doggie;
‘D’: the Door; or
‘.’: an empty block.
The input is terminated with three 0’s. This test case is not to be processed.
Output
For each test case, print in one line “YES” if the doggie can survive, or “NO” otherwise.
Sample Input
4 4 5
S.X.
..X.
..XD
….
3 4 5
S.X.
..X.
…D
0 0 0
Sample Output
NO
YES
题意:
老鼠需要跑出迷宫,在每个位置停留1s,入口是S(老鼠一开始在这里),需要在T时刻正好跑到D位置(出口)。求老鼠能不能成功逃脱。
一开始我没有用剪枝,果断超时。
还有,好久没用c语言A题了,char输入时~回车绞了我半小时的思维。。
奇偶性剪枝有关内容大家可以百度搜下,我就不写了,我是自己推出来的,和有些版本不一样。
#include <stdio.h>
#include <string.h>
char map[10][10];
int df[10][10];
int sx,sy,dx,dy;
int ans,flag,t,x,y;
void dfs(int xd,int yd,int c){
//printf("%d %d %d %d\n",xd,yd,c,flag);
if(xd<0||yd<0){
return;
}
int b=t-c;
if((xd%2==0&&yd%2!=0)||(xd%2!=0&&yd%2==0)){
if(b%2!=0){
if(!((dx%2==0&&dy%2==0)||(dx%2!=0&&dy%2!=0))){
return;
}
}else{
if(!((dx%2!=0&&dy%2==0)||(dx%2==0&&dy%2!=0))){
return;
}
}
}else{
if(b%2==0){
if(!((dx%2==0&&dy%2==0)||(dx%2!=0&&dy%2!=0))){
return;
}
}else{
if(!((dx%2!=0&&dy%2==0)||(dx%2==0&&dy%2!=0))){
return;
}
}
}
if(map[xd][yd]=='X'||df[xd][yd]||flag){
return;
}
if(c>t){
return;
}
if(c==t&&dx==xd&&dy==yd){
flag=1;
return;
}
df[xd][yd]=1;
dfs(xd-1,yd,c+1);
dfs(xd,yd-1,c+1);
dfs(xd+1,yd,c+1);
dfs(xd,yd+1,c+1);
df[xd][yd]=0;
}
int main(){
while(scanf("%d%d%d",&x,&y,&t),x||y||t){
memset(df,0,sizeof(df));
int i,j;
ans=0;
flag=0;
for(i=0;i<10;i++){
for(j=0;j<10;j++){
map[i][j]='X';
}
}
getchar();
for(i=0;i<x;i++){
for(j=0;j<y;j++){
scanf("%c",&map[i][j]);
if(map[i][j]=='S'){
sx=i;sy=j;
}else if(map[i][j]=='D'){
dx=i;dy=j;ans++;
}else if(map[i][j]=='.'){
ans++;
}
}
getchar();
}
// printf("%d %d\n",ans,t);
if(ans<t){
printf("NO\n");
continue;
}
dfs(sx,sy,0);
if(flag){
printf("YES\n");
}else{
printf("NO\n");
}
// printf("%d",flag);
}
return 0;
}
HDOJ/HDU Tempter of the Bone(深搜+奇偶性剪枝)的更多相关文章
- hdu 1010 Tempter of the Bone 深搜+剪枝
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- HDOJ/HDU 1242 Rescue(经典BFS深搜-优先队列)
Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is ...
- hdu1010 Tempter of the Bone(深搜+剪枝问题)
Tempter of the Bone Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission( ...
- HDOJ.1010 Tempter of the Bone (DFS)
Tempter of the Bone [从零开始DFS(1)] 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HDOJ.1010 Tem ...
- 【笔记】「pj复习」深搜——简单剪枝
深搜--简单剪枝 说在最前面: 因为马上要 NOIP2020 了,所以菜鸡开始了复习qwq. pj 组 T1 ,T2 肯定要拿到满分的,然后 T3 , T4 拿部分分, T3 拿部分分最常见的做法就是 ...
- hdu 1010 Tempter of the Bone(深搜+奇偶剪枝)
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- HDU 1010 Temper of the bone(深搜+剪枝)
Tempter of the Bone Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) ...
- hdu 1010:Tempter of the Bone(DFS + 奇偶剪枝)
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdoj 1010 Tempter of the Bone【dfs查找能否在规定步数时从起点到达终点】【奇偶剪枝】
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
随机推荐
- Mysql JDBC 连接串参数说明
MySQL的 JDBC URL 格式 for Connector/J 如下例: jdbc:mysql://[host:port],[host:port].../[database][?参数名1][= ...
- 两款web api 调试工具
两款web api 调试工具: Fiddler (http://www.telerik.com/fiddler) Postman(http://www.getpostman.com/) 资源: Fid ...
- Gradle教程之任务管理
简要概述依赖管理 不算完美的依赖管理技术 自动管理依赖的重要性 自动依赖管理面临的挑战 声明依赖 外部模块依赖 文件依赖 配置远程仓库 这一章我将介绍Gradle对依赖管理的强大支持,学习依赖分组和定 ...
- Debian vim没有颜色的解决办法
最近在研究Linux kali 3.12-kali1-amd64 Debian 3.12.6-2kali1 x86_64 GNU/Linux Debian的内核 发现vim竟然没有颜色,root或 ...
- linux驱动(一)
编写模块必须先声明下面两句: #include <linux/module.h> //这个头文件包含了许多符号与函数的定义,这些符号与函数多与加载模块有关 #i ...
- File控件杂谈
我们通常使用<input type='file'/>来实现网页中文件上传功能,用户可以通过点击file控件选择本地文件,当我们提交包含该控件的表单时,浏览器会向服务器发送用户选中的文件. ...
- mac 生成支付宝的rsa公钥和私钥 php版本
openssl genrsa -out rsa_private_key.pem 1024 公钥 openssl rsa -in rsa_private_key.pem -pubout -out rsa ...
- linux bash shell中case语句的实例
本文介绍下,在bash shell编程中,有关case语句的一个例子,学习下case语句的用法,有需要的朋友参考下. 本文转自:http://www.jbxue.com/article/13377.h ...
- MySQL簇-cluster
http://www.php100.com/manual/MySQL/ndbcluster.html 先做个标记吧.
- C++相关资源
http://www.cnblogs.com/xi52qian/p/4186983.html语言ISO/IEC JTC1/SC22/WG21 - The C++ Standards Committee ...