题目大意:输入三个整数N,M,T。在接下来的N行、M列会有一系列的字符。其中S表示起点,D表示终点。 .表示路 。 X表示墙。。。问狗能有在T秒时到达D。如果能输出YES,

否则输出NO

解题思路:DFS+剪枝

代码如下:

/*
* 1010_3.cpp
*
* Created on: 2013年8月16日
* Author: Administrator
*/ #include <iostream> using namespace std; bool flag;
int N, M, T;
int si, sj;
int ei, ej; const int maxn = 8;
int dir[4][2] = { { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 } };
char map[maxn][maxn]; bool checkEdge(int x, int y) {
if (!(x < 1 || x > N || y < 1 || y > M)) {
return true;
} return false;
} void dfs(int curX, int curY, int curT) {
if (flag) {//如果找到出口,直接返回
return;
} if (curT > T) {//如果当前花费的时间大于T,就返回
return;
} //花费的时间加上剩余需要的时间若大于T,返回
if (curT + abs(curX - ei) + abs(curY - ej) > T) {
return;
} //若到达出口最短距离和剩余时间的奇偶性不同,返回
if ((abs(curX - ei) + abs(curY - ej)) % 2 != abs(T - curT) % 2) {
return;
} if (curX == ei && curY == ej && curT == T) {
printf("YES\n");
flag = true;
return;
} int i;
for (i = 0; i < 4; ++i) {
int nextX = curX + dir[i][0];
int nextY = curY + dir[i][1]; if (checkEdge(nextX, nextY)) {
if (map[nextX][nextY] != 'X') {
map[nextX][nextY] = 'X';//使其不可达到
dfs(nextX, nextY, curT + 1);
map[nextX][nextY] = '.';//回溯时,恢复原来的状态
}
}
}
}
int main() {
while (scanf("%d%d%d", &N, &M, &T) != EOF, N || M || T) {
getchar();
int k = 0;
int i, j;
flag = false;
memset(map, 0, sizeof(map));
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;
map[i][j] = 'X'; //将开始位置置为不可达状态
} else if (map[i][j] == 'D') {
ei = i;
ej = j;
} if (map[i][j] != 'X') {
++k;
}
}
getchar();
} if (k < T) {//若可走的点数小于T,则输出NO
printf("NO\n");
continue;
} dfs(si, sj, 0); if (!flag) {
printf("NO\n");
}
}
}

(step4.3.1) hdu 1010(Tempter of the Bone——DFS)的更多相关文章

  1. HDU 1010 Tempter of the Bone --- DFS

    HDU 1010 题目大意:给定你起点S,和终点D,X为墙不可走,问你是否能在 T 时刻恰好到达终点D. 参考: 奇偶剪枝 奇偶剪枝简单解释: 在一个只能往X.Y方向走的方格上,从起点到终点的最短步数 ...

  2. 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 ...

  3. HDU 1010 Tempter of the Bone(DFS+奇偶剪枝)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010 题目大意: 输入 n m t,生成 n*m 矩阵,矩阵元素由 ‘.’ 'S' 'D' 'X' 四 ...

  4. hdu - 1010 Tempter of the Bone (dfs+奇偶性剪枝) && hdu-1015 Safecracker(简单搜索)

    http://acm.hdu.edu.cn/showproblem.php?pid=1010 这题就是问能不能在t时刻走到门口,不能用bfs的原因大概是可能不一定是最短路路径吧. 但是这题要过除了细心 ...

  5. HDU 1010 Tempter of the Bone DFS(奇偶剪枝优化)

    需要剪枝否则会超时,然后就是基本的深搜了 #include<cstdio> #include<stdio.h> #include<cstdlib> #include ...

  6. HDU 1010 Tempter of the Bone (DFS+可行性奇偶剪枝)

    <题目链接> 题目大意:一个迷宫,给定一个起点和终点,以及一些障碍物,所有的点走过一次后就不能再走(该点会下陷).现在问你,是否能从起点在时间恰好为t的时候走到终点. 解题分析:本题恰好要 ...

  7. HDOJ.1010 Tempter of the Bone (DFS)

    Tempter of the Bone [从零开始DFS(1)] 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HDOJ.1010 Tem ...

  8. 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 ...

  9. hdu 1010 Tempter of the Bone 奇偶剪枝

      如果所给的时间(步数) t 小于最短步数path,那么一定走不到. 若满足t>path.但是如果能在恰好 t 步的时候,走到出口处.那么(t-path)必须是二的倍数. 关于第二种方案的解释 ...

随机推荐

  1. php进程继续执行

    虽然浏览器提示localhost 的服务器响应时间过长.但是进程在后台继续执行,数据库的条数在增加.

  2. PL/SQL中文显示都显示成“?”的问题

    PL/SQL中文显示都显示成“?”的问题  首先我在sqlplus里面查询到的中文是正常的,然后再oracle里面的注册表里面看得nls_lang是SIMPLIFIED CHINESE_CHINA.Z ...

  3. Oracle 增加修改删除字段

    Oracle 增加修改删除字段 添加字段的语法:alter table tablename add (column datatype [default value][null/not null],…. ...

  4. Eclipse自动提示功能

    一般默认情况下,Eclipse的代码提示功能是比MicrosoftVisualStudio的差很多的,主要是Eclipse本身有很多选项是默认关闭的,要开发者自己去手动配置.如果开发者不清楚的话,就不 ...

  5. Oracle 错误码

    Oracle作为一款比较优秀同时也比较难以掌握的大型数据库,在我们学习使用的过程中,不可避免的会遇到一些错误,为此 Oracle 给出了一套完备的错误消息提示机制 我们可以根据Oracle给出的消息提 ...

  6. GUI树组件,表格

    树组件首先要new一个JTree,再加结点,然后添加到 JScrollPane JTree tree1=new JTree(); //.......添加节点 add(new ScrollPane(tr ...

  7. X-Y Problem

    X-Y Problem 对于X-Y Problem的意思如下: 1)有人想解决问题X2)他觉得Y可能是解决X问题的方法3)但是他不知道Y应该怎么做4)于是他去问别人Y应该怎么做? 简而言之,没有去问怎 ...

  8. Oracle数据库之数据类型

    Oracle数据库之数据类型 Oracle基本数据类型(亦叫内置数据类型,internal datatypes或built-in datatypes)可以按类型分为:字符串类型.数字类型.日期类型.L ...

  9. office2003万能密钥

    保证有效 OFFICE 2003 :  GWH28-DGCMP-P6RC4-6J4MT-3HFDY

  10. Tuple初探

    /*****************版权声明************************/ 大家好,我是小鸭,有问题可来邮件咨询:lxyjiang@gmail.com /************* ...