HDU 1010 Tempter of the Bone --- DFS
题目大意:给定你起点S,和终点D,X为墙不可走,问你是否能在 T 时刻恰好到达终点D。
参考: 奇偶剪枝
奇偶剪枝简单解释:
在一个只能往X、Y方向走的方格上,从起点到终点的最短步数为T1,并记其他任意走法所需步数为T2,则T2-T1一定为偶数。
即若某一点到终点的最短步数为T1,且T3-T1为奇数,则一定无法话费T3步恰好到达终点。
/*HDU 1010 ------ Tempter of the Bone DFS*/
#include <cstdio>
#include <cstring> int m, n, t, startx, starty, endx, endy;
char mapp[][];
bool visit[][], ans, flag; /*求a-b的绝对值*/
int abs(int a, int b){
if (a < b)
return b - a;
else
return a - b;
} /*搜索从i,j处走走到出口的结果 i j为横纵坐标 c为当前已走步数*/
void DFS(int i, int j, int c){
if (flag || c > t || i <= || i > n || j <= || j > m)
return;
if (mapp[i][j] == 'D' && c == t){
ans = flag = ;
return;
}
int tmp = abs(i, endx) + abs(j, endy); //最短可到距离
tmp = t - c - tmp; //t-c为剩余可走步数 减去最短距离为 剪纸
if (tmp & ) //若剪枝后tmp为奇数 一定不可到达
return; //左边的点可以访问
if (!visit[i - ][j] && mapp[i - ][j] != 'X'){
visit[i - ][j] = true;
DFS(i - , j, c + );
visit[i - ][j] = false;
}
//右边的点可以访问
if (!visit[i + ][j] && mapp[i + ][j] != 'X'){
visit[i + ][j] = true;
DFS(i + , j, c + );
visit[i + ][j] = false;
}
//上边的点可以访问
if (!visit[i][j - ] && mapp[i][j - ] != 'X'){
visit[i][j - ] = true;
DFS(i, j - , c + );
visit[i][j - ] = false;
}
//下边的点可以访问
if (!visit[i][j + ] && mapp[i][j + ] != 'X'){
visit[i][j + ] = true;
DFS(i, j + , c + );
visit[i][j + ] = false;
}
} int main()
{
//n行m列t步
while (scanf("%d%d%d", &n, &m, &t) == && (m + n + t)){
int k = ;
memset(visit, , sizeof visit);
//i,j取1是为了判别时数组不越界
for (int i = ; i <= n; ++i){
scanf("%s", mapp[i]+);
for (int j = ; j <= m; ++j){
if (mapp[i][j] == 'X'){
++k; //记录墙的数量
}
else if (mapp[i][j] == 'S'){
startx = i; //记录起始点
starty = j;
visit[i][j] = true;
}
else if (mapp[i][j] == 'D'){
endx = i; //记录终点
endy = j;
}
}//for(j)
}//for(i) ans = flag = ;
if (n*m - k - >= t) //总数-墙-起点 需大于等于 步数
DFS(startx, starty, );
if (ans)
printf("YES\n");
else
printf("NO\n");
} return ;
}
HDU 1010 Tempter of the Bone --- DFS的更多相关文章
- 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 ...
- HDU 1010 Tempter of the Bone(DFS+奇偶剪枝)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010 题目大意: 输入 n m t,生成 n*m 矩阵,矩阵元素由 ‘.’ 'S' 'D' 'X' 四 ...
- hdu - 1010 Tempter of the Bone (dfs+奇偶性剪枝) && hdu-1015 Safecracker(简单搜索)
http://acm.hdu.edu.cn/showproblem.php?pid=1010 这题就是问能不能在t时刻走到门口,不能用bfs的原因大概是可能不一定是最短路路径吧. 但是这题要过除了细心 ...
- (step4.3.1) hdu 1010(Tempter of the Bone——DFS)
题目大意:输入三个整数N,M,T.在接下来的N行.M列会有一系列的字符.其中S表示起点,D表示终点. .表示路 . X表示墙...问狗能有在T秒时到达D.如果能输出YES, 否则输出NO 解题思路:D ...
- HDU 1010 Tempter of the Bone DFS(奇偶剪枝优化)
需要剪枝否则会超时,然后就是基本的深搜了 #include<cstdio> #include<stdio.h> #include<cstdlib> #include ...
- HDU 1010 Tempter of the Bone (DFS+可行性奇偶剪枝)
<题目链接> 题目大意:一个迷宫,给定一个起点和终点,以及一些障碍物,所有的点走过一次后就不能再走(该点会下陷).现在问你,是否能从起点在时间恰好为t的时候走到终点. 解题分析:本题恰好要 ...
- HDOJ.1010 Tempter of the Bone (DFS)
Tempter of the Bone [从零开始DFS(1)] 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HDOJ.1010 Tem ...
- 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 ...
- 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 ...
随机推荐
- 记录一些容易忘记的属性 -- UIKeyboard
//UIKeyboardWillShowNotification这个通知在软键盘弹出时由系统发送 //UIKeyboardWillShowNotification 通知:键盘将要显示的通知 ...
- 聚簇(Cluster)和聚簇表(Cluster Table)
聚簇(Cluster)和聚簇表(Cluster Table) 时间:2010-03-13 23:12来源:OralanDBA.CN 作者:AlanSawyer 点击:157次 1.创建聚簇 icmad ...
- (转)JS中innerHTML,innerText,value
原文:http://holysonll.blog.163.com/blog/static/21413909320134111054352/ JS中innerHTML,innerText,value 2 ...
- UIkit框架之Uivew
1.继承链:UIresponder:NSObject 2.通过使用 addGestureRecognizer:方法可以为视图添加手势 3.下面的属性都可以用来用于动画 @property frame ...
- Linux物理内存相关数据结构
节点:pg_data_t typedef struct pglist_data { zone_t node_zones[MAX_NR_ZONES]; zonelist_t node_zonelists ...
- LeetCode----Copy List with Random Pointer 深度拷贝,浅度拷贝,Lazy拷贝解析
题目:A linked list is given such that each node contains an additional random pointer which could poin ...
- PHP输出缓冲控制
说到输出缓冲,首先要说的是一个叫做缓冲器(buffer)的东西.举个简单的例子说明他的作用:我们在编辑一篇文档时,在我们没有保存之前,系统是不会 向磁盘写入的,而是写到buffer中,当buffer写 ...
- apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName的解决
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ...
- ios学习之 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
刚接触iOS开发的人难免会对苹果的各种证书.配置文件等不甚了解,可能你按照网上的教程一步一步的成功申请了真机调试,但是还是对其中的缘由一知半解.这篇文章就对Certificate.Provisioni ...
- codeforces round367 div2.C (DP)
题目链接:http://codeforces.com/contest/706/problem/C #include<bits/stdc++.h> using namespace std; ...