ZOJ-1010 奇偶剪枝
题目描述: 判断在指定时间内dog是否能从制定开始位置走到制定结束位置。每走一步需要花费一个单位时间(秒).题目涉及奇偶剪枝及dfs
算法描述: 先判断在哪些条件下不可达,即找出所有可能的剪枝,然后从当前位置的四个方向分别回溯,找出到达制定门的最短路径
算法代码如下:
#include <iostream> #include <cmath> using namespace std;typedef struct cord {int x;int y; }Point; Point sp,ep;//sp:coordinate of start position,ep:coordinate of end position(door) const int MAX=7;char map[MAX][MAX]; bool bFlag = false; int numWall; int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; int N,M,T; int Dis(Point &p1, Point &p2) {return (abs(p1.x-p2.x)+abs(p1.y-p2.y)); } void dfs(Point startP,int t) {if(bFlag)return;if( t < Dis(startP,ep) || (t-Dis(startP,ep))%2)return;else if(t==0){if(startP.x ==ep.x && startP.y == ep.y){ bFlag=true;return;}elsereturn;}else{for(int i=0;i<4;++i){Point tP;tP.x = startP.x+dir[i][0];tP.y = startP.y+dir[i][1];if(tP.x>=0 && tP.x < N && tP.y>=0 && tP.y < M && ( map[tP.x][tP.y] == '.' || map[tP.x][tP.y]=='D')){map[tP.x][tP.y] = 'X';//mark it has been accesseddfs(tP,t-1);map[tP.x][tP.y] = '.';//backtrack }}}} int main() {while(cin>>N>>M>>T && N|M|T){int i,j;numWall = 0;bFlag = false;for(i=0;i<N;++i){for(j=0;j<M;++j){cin>>map[i][j];if(map[i][j] =='S'){sp.x = i;sp.y = j;}else if(map[i][j] =='D'){ep.x = i;ep.y = j;}else if(map[i][j] =='X')numWall++;}}if(N*M-numWall > T && Dis(sp,ep) <= T) //基本剪枝 {dfs(sp,T);}if(bFlag)cout<<"YES"<<endl;elsecout<<"NO"<<endl;}return 0; }
转载于:https://www.cnblogs.com/ballwql/archive/2013/03/24/zoj1010.html
ZOJ-1010 奇偶剪枝相关推荐
- HDU 1010 深搜+奇偶剪枝
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1010 贴个资料: http://acm.hdu.edu.cn/forum/read.php?tid=615 ...
- zoj(2110)Tempter of the Bone(DFS+奇偶剪枝)
剪枝很重要,可走的格数小于时间则减去,然后就是奇偶性剪枝 可以把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 ...
- 回溯法+奇偶剪枝——Hdu 1010 Tempter of the Bone
1) 题目 Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- Tempter of the Bone HDU - 1010(DFS + 奇偶剪枝)
题目 这个题思路不难,就是不用奇偶剪枝的话会出现TLE,奇偶剪枝说白了就是一个矩阵分成两种区域,从一种区域走到另一个区域必是奇数步数,从一种区域走回自己的区域必是偶数步数,就算出现了障碍物这个结论依旧 ...
- Tempter of the Bone(DFS + 奇偶剪枝,好题)
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdu1010深搜+奇偶剪枝
奇偶剪枝:把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 ...
- zoj 1010 Area (叉积求面积 与 跨立相交实验判断相交)
题目链接:zoj 1010 题意:给你 N 个点的坐标,点是按照顺序输入的.每一个点都与它后面的那个点连成一条线段,最后一个点与起点相连. 求组成的多边形的面积. 参考博客:https://blog ...
- HDU 1010 Tempter of the Bone DFS(奇偶剪枝优化)
需要剪枝否则会超时,然后就是基本的深搜了 #include<cstdio> #include<stdio.h> #include<cstdlib> #include ...
- hdu - 1010 dfs + 奇偶剪枝
problem - 1010 找有多少条路可以到达目的地.如果能到达的话必须在t时刻.先统计有多少个不能走的点,如果n*m-wall,(wall表示'X'点数量 )<= k 的话,一定无法在t时 ...
最新文章
- [Android Pro] AndroidX重构和映射
- 段错误linux 内存不够,c - 为什么我的程序在linux-gcc而不是mingw-gcc上出现段错误? - 堆栈内存溢出...
- 旷视AI「炼丹房」Brain++ 再升级 首席科学家孙剑发AI「灵魂」三问
- 全局静态存储区、堆区和栈区深入剖析
- Oops! the requested resource is not found!
- Java学习笔记之:Java引用数据类型之字符串
- 【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集
- pytorch制作test和train下面还有类别的文件(从一个图片文件中复制)
- ubuntu 强制结束 pycharm
- matlab igbt在哪,提出问题:“IGBT是什么?都在哪里有应用?”
- 计算机应用 winxp,XP平台:计算机应用基础
- 摄影培训社培训资料(上
- MySql in子句 效率低下优化
- msdn我告诉你win10哪个是专业版
- Angular cdk 学习之 drag-drop
- 【OpenGL ES】FBO离屏渲染
- SmartFoxServer 2X管理工具
- 优秀笔记课件——WORD使用技巧
- ASRT中文语音识别系统
- linux:shell命令之软硬链接
热门文章
- JavaScript Math.random()随机数函数
- 2022牛客寒假算法基础集训营1 签到题7题
- 【poj3263】Tallest Cow(差分数组)
- 【Web前端】搭建网站相关术语
- python生成wps文件_使用Python操作XLS文件(wps中叫et)
- SQL Server高级查询之子查询(多行子查询)
- java数组子类型_在vhdl中获取数组子类型的范围属性
- 记忆化搜索--poj 1597 Function Run Fun
- html 列导航包括导航,在HTML5中,主导航应该在元素内部还是外部?
- OSI七层协议模型和各自的功能