题目描述: 判断在指定时间内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 奇偶剪枝相关推荐

  1. HDU 1010 深搜+奇偶剪枝

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1010 贴个资料: http://acm.hdu.edu.cn/forum/read.php?tid=615 ...

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

  3. 回溯法+奇偶剪枝——Hdu 1010 Tempter of the Bone

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

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

    题目 这个题思路不难,就是不用奇偶剪枝的话会出现TLE,奇偶剪枝说白了就是一个矩阵分成两种区域,从一种区域走到另一个区域必是奇数步数,从一种区域走回自己的区域必是偶数步数,就算出现了障碍物这个结论依旧 ...

  5. Tempter of the Bone(DFS + 奇偶剪枝,好题)

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

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

  7. zoj 1010 Area (叉积求面积 与 跨立相交实验判断相交)

    题目链接:zoj 1010 题意:给你 N  个点的坐标,点是按照顺序输入的.每一个点都与它后面的那个点连成一条线段,最后一个点与起点相连. 求组成的多边形的面积. 参考博客:https://blog ...

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

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

  9. hdu - 1010 dfs + 奇偶剪枝

    problem - 1010 找有多少条路可以到达目的地.如果能到达的话必须在t时刻.先统计有多少个不能走的点,如果n*m-wall,(wall表示'X'点数量 )<= k 的话,一定无法在t时 ...

最新文章

  1. [Android Pro] AndroidX重构和映射
  2. 段错误linux 内存不够,c - 为什么我的程序在linux-gcc而不是mingw-gcc上出现段错误? - 堆栈内存溢出...
  3. 旷视AI「炼丹房」Brain++ 再升级 首席科学家孙剑发AI「灵魂」三问
  4. 全局静态存储区、堆区和栈区深入剖析
  5. Oops! the requested resource is not found!
  6. Java学习笔记之:Java引用数据类型之字符串
  7. 【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集
  8. pytorch制作test和train下面还有类别的文件(从一个图片文件中复制)
  9. ubuntu 强制结束 pycharm
  10. matlab igbt在哪,提出问题:“IGBT是什么?都在哪里有应用?”
  11. 计算机应用 winxp,XP平台:计算机应用基础
  12. 摄影培训社培训资料(上
  13. MySql in子句 效率低下优化
  14. msdn我告诉你win10哪个是专业版
  15. Angular cdk 学习之 drag-drop
  16. 【OpenGL ES】FBO离屏渲染
  17. SmartFoxServer 2X管理工具
  18. 优秀笔记课件——WORD使用技巧
  19. ASRT中文语音识别系统
  20. linux:shell命令之软硬链接

热门文章

  1. JavaScript Math.random()随机数函数
  2. 2022牛客寒假算法基础集训营1 签到题7题
  3. 【poj3263】Tallest Cow(差分数组)
  4. 【Web前端】搭建网站相关术语
  5. python生成wps文件_使用Python操作XLS文件(wps中叫et)
  6. SQL Server高级查询之子查询(多行子查询)
  7. java数组子类型_在vhdl中获取数组子类型的范围属性
  8. 记忆化搜索--poj 1597 Function Run Fun
  9. html 列导航包括导航,在HTML5中,主导航应该在元素内部还是外部?
  10. OSI七层协议模型和各自的功能