一:题意描述

本题大致意思是讲给定一个迷宫(N*M),起点(s)和终点(D),现在要求在给定的步数(T)下从起点走到终点。要求是每一个点只能走一次。

二:题目分析

考虑到数据比较小,我们完全可以利用dfs去暴力出来,但是对于本题我想说一个很特别的技巧就是奇偶剪枝:对于任何一个可能的路径,我们都可以看做是S与D的最短距离

MIN=abs(sx-dx)+abs(dx-dy)+一个偶数。对于我们为何加一个偶数?我们可以这样想:我们既然是加了最短距离,那么当我们从某一个点偏离最短路长的时候必定重新回到偏离的那个点,那么走过的路长一定是偶数。

根据数据的加减性质:偶数+奇数=奇数;偶数+偶数=偶数

所以我们只要判断T和MIN是否同时奇数或者偶数即可,那么这样可以节省很多时间。如果是相同的话,才进行下一步的DFS,在用DFS时同样可以剪枝。

三:AC代码

#include<iostream>
#include<cmath>
#include<string.h>
using namespace std;
#define maxn 8
char maps[maxn][maxn];
int T;
int dfs(int x,int y,int len)
{if(maps[x][y]=='D'){if(len==T)  return 1;else if(len!=T) return 0;}else{if(len>=T) return 0;else{if(maps[x][y-1]!='X'){maps[x][y]='X';if(dfs(x,y-1,len+1)) return 1;maps[x][y]='.';}if(maps[x][y+1]!='X'){maps[x][y]='X';if(dfs(x,y+1,len+1)) return 1;maps[x][y]='.';}if(maps[x+1][y]!='X'){maps[x][y]='X';if(dfs(x+1,y,len+1)) return 1;maps[x][y]='.';}if(maps[x-1][y]!='X'){maps[x][y]='X';if(dfs(x-1,y,len+1)) return 1;maps[x][y]='.';}}return 0;}}
int main()
{int m,n;while(cin>>n>>m>>T){if(!n&&!m&&!T) break;int step=0;int sx,sy;memset(maps,'X',sizeof(maps));for(int i=1;i<=n;i++)//初始化矩阵for(int j=1;j<=m;j++){cin>>maps[i][j];if(maps[i][j]=='S'){sx=i;sy=j;}}if((abs(ex - sx) + abs(ey - sy) - T)&1){cout<<"NO"<<endl;continue;}else{if(dfs(sx,sy,step)) cout<<"YES"<<endl;else cout<<"NO"<<endl;}}return 0;
}

四:总结

在以后的题目中一定要注意学会仔细分析问题抓住本质,进而简化分析。

转载于:https://www.cnblogs.com/khbcsu/p/4251708.html

HDU1010【走迷宫】Tempter of the Bone-------2015年1月26日相关推荐

  1. 2015年10月26日作业

    2015年10月26日作业 一.PMI权限(授权)管理基础设施 1.访问控制包括哪2个重要过程,及内容: 答:(1)通过"鉴别"来检验主体的合法身份:(2)过"授权&qu ...

  2. python入门之玩转列表我的菜单_我的Python成长之路---第一天---Python基础(作业2:三级菜单)---2015年12月26日(雾霾)...

    #!/usr/bin/env python3#coding:utf-8 '''Created on: 2015年12月30日 @author: 张晓宇 Email: 61411916@qq.com V ...

  3. 我的Python成长之路---第一天---Python基础(5)---2015年12月26日(雾霾)

    六.流程控制 与C语言不通的事Python的流程控制的代码块不是用{}花括号表示的,而是用强制缩进来,而且缩进必须一致,官方推荐是使用4个空格,不建议使用使用tab(制表符)做缩进,一是不同的系统ta ...

  4. 各种搜索算法比较--2015年7月26日16:42:45V1.0版

    1.顺序查找 int SequenceSearch(int a[],int n,int key) //顺序查找 {for(int i = 0; i < n; i++){if(key == a[i ...

  5. 2015年6月26日-ps通道和bridge

    bridge 也是Adobe公司的产品,提供多种格式图片的预览与调色.而且在这里的调色是无损的,会把照片拍照那一刻瞬时的各种数据(曝光等)全部重新设置.也就是对照片重新进行一次部署.下面介绍2种最常用 ...

  6. 【人物】奥斯卡·王尔德——2015年9月26日

    前段时间看到有人在读一篇关于一个欧洲作家的文章,当时没怎么想法,今天突然想起来,便又去查了查资料. [以下是资料的节选] 这是一个历史上有名同性恋者,叫做奥斯卡·王尔德(Oscar Wilde,185 ...

  7. 2015年04月26日

    CV领域各个方向的公开数据库 http://homepages.inf.ed.ac.uk/rbf/CVonline/Imagedbase.htm 这篇文章基于PETS2009 S2L1的两个视角 00 ...

  8. 始于2015年11月23日,终于2018年08月08日

    留念. 2015年11月23日:在一起 2016年01月17日-21日:北京机场,我们❤ 2016年04月16日:去他所在城市--成都 2016年06月04-06日:第一次小旅游--都江堰.青城山 2 ...

  9. 微软欢迎所有热爱开源软件的朋友们来投稿![征稿开放时间:2015年8月17日]

    Azure是微软的云平台,不仅支持Windows服务器,也深爱着开源世界.通过与开源社区之间的合作, Azure支持了大量的开源软件和框架,涵盖了包括Linux 服务器,Docker, chef, M ...

  10. 重走长征路---OI每周刷题记录---4月12日 2015

    总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...

最新文章

  1. 性能测试通过几种方式造数据
  2. 设备选购需要注意的几个方面
  3. 把C#.NET程序移植到DB2上的经验浅谈(C#连接DB2可以用IBM.Data.DB2.dll)
  4. 二分算法:平均值(洛谷 UVA1451)
  5. java技术难点_Java核心技术第四章----对象与类重难点总结
  6. LeetCode 678. 有效的括号字符串(栈)
  7. mysql centos 安装目录在哪_centos中如何查看mysql安装目录在哪
  8. java评论回复功能例子_Java实现评论回复功能的完整步骤
  9. 如何编译Linux kernel
  10. 创维发布四款新品 将投入65亿元建MiniLED显示科技产业园
  11. [Flink]Flink DataStream API 概览
  12. LINUX Telepresence编译详细过程记录
  13. java 零配置_Spring零配置之@Configuration注解详解
  14. 用于专利申请的创新提案模板
  15. python爬虫:Selenium 爬取东方财富网上市公司财务报表
  16. 使用 WebSocket 实现一个网页版的聊天室(摸鱼更隐蔽)
  17. python 数字转换为汉字大写
  18. 丢番图方程c语言114,丢番图方程的实现
  19. C语言:初学者2--求π的值(3种方法)
  20. 读书笔记--《围城》

热门文章

  1. 【转】javascript Object使用Array的方法
  2. Erlang/Elixir: 外部通信之-NIF
  3. 批处理获取网卡名称(附修改IP、网关、DNS脚本)
  4. C++复合类型-指针变量
  5. Android开发之Activity(实现Activity跳转)
  6. break 退出循环
  7. 用计算机模拟实验技术路线,自然科学基金申请书模板
  8. nuget的原理_从零开始学习 dotnet 编译过程和 Roslyn 源码分析
  9. lzw编码 matlab,LZW编码算法matlab实现.docx
  10. tcpip路由技术卷一_学网络拿高薪!「纯干货」IELAB路由技术问题总结1