HDU 1010 Tempter of the Bone (DFS+可行性奇偶剪枝)
<题目链接>
题目大意:
一个迷宫,给定一个起点和终点,以及一些障碍物,所有的点走过一次后就不能再走(该点会下陷)。现在问你,是否能从起点在时间恰好为t的时候走到终点。
解题分析:
本题恰好要在某一时刻到达,所以需要用到可行性剪枝中的奇偶剪枝,如果在某一点,它所剩的步数与到终点的最短距离之差是偶数,说明这种情况有可能恰好在规定时刻到达终点,否则不可能,将其剪去。
#include <bits/stdc++.h>
using namespace std; char mpa[][];
int vis[][];
int n,m,t,sx,sy,ex,ey;
bool fp;
const int dir[][]={,,,,-,,,-}; void dfs(int x,int y,int step){
if(x==ex&&y==ey&&step==t){fp=true;return;} //恰好达到终点
int tmp=t-step-abs(ex-x)-abs(ey-y); //重要的剪枝,可行性奇偶剪枝
if(tmp< || tmp&)return;
if(step>t)return; //超过规定时间,剪去
if(fp)return;
for(int k=;k<;k++){
int nx=x+dir[k][],ny=y+dir[k][];
if(nx<||nx>n||ny<||ny>m||vis[nx][ny]||mpa[nx][ny]=='X')continue;
vis[nx][ny]=;
dfs(nx,ny,step+);
if(fp)return; //已经找到答案,结束分支
vis[nx][ny]=;
}
}
int main(){
while(~scanf("%d%d%d",&n,&m,&t),n||m||t){
for(int i=;i<=n;i++){
scanf("%s",mpa[i]+);
for(int j=;j<=m;j++){
if(mpa[i][j]=='S')sx=i,sy=j;
if(mpa[i][j]=='D')ex=i,ey=j;
}
}
memset(vis,,sizeof(vis));
fp=false;
vis[sx][sy]=;dfs(sx,sy,);
fp?puts("YES"):puts("NO");
}
}
HDU 1010 Tempter of the Bone (DFS+可行性奇偶剪枝)的更多相关文章
- HDU 1010 Tempter of the Bone DFS(奇偶剪枝优化)
需要剪枝否则会超时,然后就是基本的深搜了 #include<cstdio> #include<stdio.h> #include<cstdlib> #include ...
- HDU 1010 Tempter of the Bone --- DFS
HDU 1010 题目大意:给定你起点S,和终点D,X为墙不可走,问你是否能在 T 时刻恰好到达终点D. 参考: 奇偶剪枝 奇偶剪枝简单解释: 在一个只能往X.Y方向走的方格上,从起点到终点的最短步数 ...
- 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+奇偶剪枝)
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+奇偶性剪枝) && 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 ...
- 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 ...
随机推荐
- SQL Server 2012-2016-2017 简体中文版下载和序列号
注:本文来源于<SQL Server 2012-2016-2017 简体中文版下载和序列号> SqlServer 2017 下载地址及密钥 下载地址:ed2k://|file|cn_sql ...
- python之dict与set实现原理之hash算法
理解不透彻,下回分解 http://www.cnblogs.com/pengsixiong/p/5326893.html https://blog.csdn.net/zhao_crystal/arti ...
- SpringBoot获取配置文件的自定义参数
1.在application.properties中自定义参数 spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datas ...
- 自己没有记住的一点小知识(ORM查询相关)
一.多对多的正反向查询 class Class(models.Model): name = models.CharField(max_length=32,verbose_name="班级名& ...
- java----java工具类
System: Runtime: Random: Scanner: Arrays: MessageFormat: Math: 日期: Comparable: cloneable接口: 数字处理: MD ...
- excel生成数据
Sub function1()Dim i As LongFor i = 1 To 1000000Cells(i, 1) = "A" & iCells(i, 2) = &qu ...
- Leetcode刷题第001天
一.合并两个有序链表 [题目]206. 反转链表 /** * Definition for singly-linked list. * struct ListNode { * int val; * L ...
- 如何保证Redis的高可用
什么是高可用 全年时间里,99%的时间里都能对外提供服务,就是高可用 主备切换 在master故障时,自动检测,将某个slave切换为master的过程,叫做主备切换.这个过程,实现了Redis主从架 ...
- error: not found: value sqlContext/import sqlContext.implicits._/error: not found: value sqlContext /import sqlContext.sql/Caused by: java.net.ConnectException: Connection refused
1.今天启动启动spark的spark-shell命令的时候报下面的错误,百度了很多,也没解决问题,最后想着是不是没有启动hadoop集群的问题 ,可是之前启动spark-shell命令是不用启动ha ...
- WMSYS.WM_CONCAT返回CLOB类型的解决办法
https://blog.csdn.net/cnm_csdn_wt/article/details/80047878