hdu 1010 dfs搜索
Tempter of the Bone
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 107138 Accepted Submission(s): 29131
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.
'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.
题目大意是要在那个时间点找到D点,典型的DFS问题,重点是要求奇偶减枝
#include <stdio.h> #include <math.h> #include <cmath> #include <iostream> using namespace std; #define Maxn 100 int hang,lie,Time; char MAP[Maxn][Maxn]; int begin_x,begin_y; int end_x,end_y; bool flag; int dir[4][2] = { {0,1}, {0,-1}, {1,0}, {-1,0} }; void print() { for(int i = 0; i < hang; i++) { for(int j = 0; j < lie; j++) { printf("%c",MAP[i][j]); } printf("\n"); } } void dfs(int x, int y, int t) { // print(); // printf("\n"); if (flag) { return ; } // printf("Q\n", ); if (x == end_x && y == end_y && t == Time) { // printf("YES~~~~~~~~~~~\n"); flag = true; return ; } int temp = (Time - t) - ( abs(x- end_x) + abs(y - end_y) ); if (temp < 0 || temp & 1) { return ; // 奇偶剪枝 /*要理解奇偶剪枝,先了解一下曼哈顿距离, 从一个点到达另外一个点的最 短路径长度(时间)可以根据两点坐标求出, 路径长度(非最短)与最短路径的长度同奇偶, 它们的差一定是偶数!举个例子,就像两个偶数的差 差是偶数,两个个数的差也是偶数.*/ } for(int i = 0; i < 4; i++) { int xx = x + dir[i][0]; int yy = y + dir[i][1]; if (xx >= 0 && xx < hang && yy >= 0 && yy < lie) { if (MAP[xx][yy] != 'X') { MAP[xx][yy] = 'X'; dfs(xx,yy,t+1); MAP[xx][yy] = '.'; } } } return ; } int main() { while(cin >> hang >> lie >> Time,hang + lie + Time) { flag = false; for(int i = 0; i < hang; i++) { scanf("%s",MAP[i]); } for(int i = 0; i < hang; i++) { for(int j = 0; j < lie; j++) { if (MAP[i][j] == 'S') { begin_x = i; begin_y = j; } else if (MAP[i][j] == 'D') { end_x = i; end_y = j; } } } // printf("%d %d\n",begin_x,begin_y); MAP[begin_x][begin_y] = 'X'; dfs(begin_x,begin_y,0); if (flag) { printf("YES\n"); } else { printf("NO\n"); } } }
hdu 1010 dfs搜索的更多相关文章
- HDU 1010 (DFS搜索+奇偶剪枝)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1010 题目大意:给定起点和终点,问刚好在t步时能否到达终点. 解题思路: 4个剪枝. ①dep&g ...
- hdu 1010(DFS) 骨头的诱惑
http://acm.hdu.edu.cn/showproblem.php?pid=1010 题目大意从S出发,问能否在时间t的时候到达终点D,X为障碍 需要注意的是要恰好在t时刻到达,而不是在t时间 ...
- HDU 1045 (DFS搜索)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1045 题目大意:在不是X的地方放O,所有O在没有隔板情况下不能对视(横行和数列),问最多可以放多少个 ...
- HDU 1241 (DFS搜索+染色)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1241 题目大意:求一张地图里的连通块.注意可以斜着连通. 解题思路: 八个方向dfs一遍,一边df ...
- Tempter of the Bone HDU 1010(DFS+剪枝)
Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. However, ...
- HDU 1010 Tempter of the Bone --- DFS
HDU 1010 题目大意:给定你起点S,和终点D,X为墙不可走,问你是否能在 T 时刻恰好到达终点D. 参考: 奇偶剪枝 奇偶剪枝简单解释: 在一个只能往X.Y方向走的方格上,从起点到终点的最短步数 ...
- HDU 1312:Red and Black(DFS搜索)
HDU 1312:Red and Black Time Limit:1000MS Memory Limit:30000KB 64bit IO Format:%I64d & ...
- hdu 1312:Red and Black(DFS搜索,入门题)
Red and Black Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- Tempter of the Bone HDU - 1010(dfs)
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
随机推荐
- 《转》前端性能优化----yahoo前端性能团队总结的35条黄金定律
除了自己总结:1. 减少http请求,2.压缩并优化js/css/image 3.尽量静态页面,从简原则 4.代码规范(详见:个人知识体系思维导图) 从yahoo 新学到的: 网页内容 减少http请 ...
- http请求的组成部分
报文流 1.HTTP 报文是在HTTP 应用程序之间发送的数据块.这些数据块以一些文本形式的元信息(meta-information)开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分.这些 ...
- Windows Phone 之下拉菜单ListPicker
默认情况下,Visual Studio的ToolBox里没有任何下拉菜单的控件可供使用,虽然可以手工输入代码使用隐藏的ComboBox来实现下拉菜单,但是显示出来的菜单与Metro UI主题不匹配.S ...
- jQuery 鼠标滑过及选中一行效果
/******* 表格效果 ********/ $("#gird_tbl tbody tr").live('mouseover', function () { $(this).ad ...
- PreResultListener使用
PreResultListener是一个监听器接口,可以在Action处理完之后,系统转入实际视图前被回调. Struts2应用可以给Action.拦截器添加PreResultListener监听器, ...
- js 中对象--对象结构(原型链基础解析)
对于本篇对于如何自定义对象.和对象相关的属性操作不了解的话,可以查我对这两篇博客.了解这两篇可以更容易理解本篇文章 用构造函数创建了一个对象 obj对象的本身创建了两个属性 x=1 ,y=2 ...
- ubuntu chm文档阅读
四种方法在Ubuntu下查看CHM文件 来源:http://os.51cto.com/art/201108/287748.htm Ubuntu是一个以桌面应用为主的Linux操作系统,刚开始使用Ubu ...
- 在oj平台上练习的一些总结【转】
程序书写过程中的一些小技巧:1. freopen(“1.txt”,”r”,stdin); //程序运行后系统自动输入此文档里面的内容(不需要进行手动输入)freopen(“1.txt”,”w”,std ...
- SQL Server与Oracle中的隔离级别
在SQL92标准中,事务隔离级别分为四种,分别为:Read Uncommitted.Read Committed.Read Repeatable.Serializable 其中Read Uncommi ...
- Servlet 是否线程安全 看完便知
Servlet 是否线程安全 看完便知 转自:http://blog.sina.com.cn/s/blog_6448959f0100kct7.html 摘 要:介绍了Servlet多线程机制, ...