深度搜索,注意要剪枝

1.奇偶剪枝

  可以把map看成这样:
  0 1 0 1 0 1
  1 0 1 0 1 0
  0 1 0 1 0 1
  1 0 1 0 1 0
  0 1 0 1 0 1
  从为 0 的格子走一步,必然走向为 1 的格子
  从为 1 的格子走一步,必然走向为 0 的格子
  即:
  0 ->1或1->0 必然是奇数步
  0->0 走1->1 必然是偶数步
 
则如果((di-si+dj-sj)&1)!=(t&1) 就可以直接输出“NO”了
 
2.判断可走的block是否小于时间总数
  n*m-wall<=t  就输出“NO”
 #include <iostream>
#include <stdio.h>
using namespace std; char map[][];
int desc[][]={{-,},{,},{,},{,-}};
int si,sj,di,dj;
int n,m,t;
int escape; void dfs(int ni,int nj,int nt)
{
if(escape) return;
if(nt>t) return;
else if(nt==t)
{
if(ni==di && nj==dj)
{
printf("YES\n");
escape=;
}
return;
}
else
{
for(int k=;k<;++k)
{
if(ni+desc[k][]>-&&ni+desc[k][]<n && nj+desc[k][]>-&&nj+desc[k][]<m)
{
if(map[ni+desc[k][]][nj+desc[k][]]!='X')
{
map[ni][nj]='X';
//printf("goto (%d,%d) %d\n",ni+desc[k][0],nj+desc[k][1],nt+1);
dfs(ni+desc[k][],nj+desc[k][],nt+);
map[ni][nj]='.';
}
}
}
}
} int main()
{
int i,j,wall; while(scanf("%d %d %d",&n,&m,&t),n||m||t)
{
escape=;
di=;
dj=;
wall=;
getchar();
for(i=;i<n;++i)
{
for(j=;j<m;++j)
{
//scanf("%c",&map[i][j]);
cin>>map[i][j];
if(map[i][j]=='S')
{
si=i;
sj=j;
}
else if(map[i][j]=='D')
{
di=i;
dj=j;
}
else if(map[i][j]=='X') ++wall;
}
//getchar();
} //前半句是判断可以走的block数是否小于等于时间;
//后半句是奇偶剪枝
if(n*m-wall<=t || ((di-si+dj-sj)&)!=(t&))
{
printf("NO\n");
continue;
}
dfs(si,sj,);
if(escape==) printf("NO\n");
}
}

HDOJ 1010的更多相关文章

  1. hdoj--1010<dfs+奇偶剪枝>

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010 题目描述:在n*m的矩阵中,有一起点和终点,中间有墙,给出起点终点和墙,并给出步数,在该步数情况 ...

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

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

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

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

  5. 杭电1010(dfs + 奇偶剪枝)

    题目: The doggie found a bone in an ancient maze, which fascinated him a lot. However, when he picked ...

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

  7. hdu1010Tempter of the Bone(dfs+奇偶剪枝)

    题目链接:pid=1010">点击打开链接 题目描写叙述:给定一个迷宫,给一个起点和一个终点.问是否能恰好经过T步到达终点?每一个格子不能反复走 解题思路:dfs+剪枝 剪枝1:奇偶剪 ...

  8. Tempter of the Bone(dfs奇偶剪枝)

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  9. Tempter of the Bone(dfs+奇偶剪枝)题解

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  10. M - Tempter of the Bone(DFS,奇偶剪枝)

    M - Tempter of the Bone Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & % ...

随机推荐

  1. 获取外网IP地址

    public static string GetRealIP(){            string result = String.Empty;            result = HttpC ...

  2. Linq101-Projection

    using System; using System.Linq; namespace Linq101 { class Projection { /// <summary> /// This ...

  3. PHP 实现无限极栏目分类

    首先,创建一个DB CREATE TABLE IF NOT EXISTS `class` ( `id` mediumint(6) NOT NULL AUTO_INCREMENT, `title` va ...

  4. configSections(配置文件)

    转载:http://www.cnblogs.com/jhxk/articles/1609182.html 由于最近一个项目的数据库变动比较频繁, 为了减少数据层的负担, 打算采用.net的MVC框架, ...

  5. (转) ThinkPHP模板自定义标签使用方法

    这篇文章主要介绍了ThinkPHP模板自定义标签使用方法,需要的朋友可以参考下  转之--http://www.jb51.net/article/51584.htm   使用模板标签可以让网站前台开发 ...

  6. Oracle11G 数据库 expdp、impdp使用示例

    expdp 备份数据库.expdp/impdp简单测试 操作系统层面创建目录 [root@Oracle11g ~]# mkdir -p /home/oracle/db_back/ 修改目录的所属用户. ...

  7. Swift - 26 - 函数的基础写法

    //: Playground - noun: a place where people can play import UIKit // 无参无返回 // -> Void可以省略不写, 或者写成 ...

  8. Asp.net 主题 【2】

    通常我们经常看到网页,一些软件提供换肤功能,各种主题间切换.ASP.NET 2.0 中可以用Theme和skin以及CSS轻松实现这个功能. 首先简单介绍一下三种技术:主题(Theme)技术,面板(s ...

  9. javascript基础学习(十一)

    javascript之BOM 学习要点: BOM介绍 Window对象 一.BOM介绍 浏览器对象模型简称为BOM(Brower Object Model),BOM由很多对象构成,对象与对象之间有着相 ...

  10. 三、singleton(单例化)一个对象的几种方法

    方案一:私有化构造器,通过static final域 @Test public void test13() { A215 a=A215.a; A215 b=A215.a; System.out.pri ...