HDOJ1010
来源:互联网 发布:开源行情软件 编辑:程序博客网 时间:2024/06/18 07:45
对深搜一直头疼,那这个例子给自己当个模板吧,当然,代码是网友大神的,原文地址:http://www.cnblogs.com/linpeidong2009/archive/2012/04/07/2436284.html。
#include<iostream>#include<math.h>using namespace std;char map[10][10];int N,M,T;int di,dj,escape;int dir[4][2]={{0,-1},{0,1},{1,0},{-1,0}};//左右下上四个方向void dfs(int x,int y,int cnt)//cnt为已耗时间{ if(x>N || y>M || x<1 || y<1 ) return; if(cnt==T && x==di && y==dj) escape=1; if(escape==1)//没有这个会超时。。。 return; int temp=(T-cnt)-abs(x-di)-abs(y-dj);// if(temp<0||temp&1) //步长优化与奇偶优化 return; for(int i=0;i<4;i++) { if(map[x+dir[i][0]][y+dir[i][1]]!='X') { map[x+dir[i][0]][y+dir[i][1]]='X'; dfs(x+dir[i][0],y+dir[i][1],cnt+1); map[x+dir[i][0]][y+dir[i][1]]='.';//回退恢复 } } return;}int main(){while(1) { int wall=0; cin>>N>>M>>T; if(N==0 && M==0 && T==0) break; int si,sj; for(int i=1;i<=N;i++) for(int j=1;j<=M;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++; } if(T>=M*N-wall) { cout<<"NO"<<endl; continue; } map[si][sj]='X'; escape=0; dfs(si,sj,0); if(escape==1) cout<<"YES"<<endl; else cout<<"NO"<<endl; }}
- hdoj1010
- hdoj1010
- HDOJ1010
- hdoj1010
- hdoj1010
- HDOJ1010(DFS)
- HDOJ1010留待学习
- HDOJ1010(搜索+剪枝)
- HDOJ1010 解题报告
- hdoj1010(dfs+剪枝技巧)
- <TLE>奇偶剪枝hdoj1010
- HDOJ1010 STILL DFS
- HDOJ1010(深搜+剪枝)
- HDOJ1010深搜+数学奇偶性剪枝
- HDOJ1010.Tempter of the Bone
- HDOJ1010 Tempter of the Bone
- hdoj1010-【Tempter of the Bone】
- HDOJ1010 Tempter of the Bone
- ubuntu下只能访问百度google问题
- 十天学会DIV+CSS 第一天XHTML CSS基础教程
- Log4Net详解(2)结构篇
- IDEA 编译Android代码发现的一个问题,编译运行后真机按home键,再点图标返回程序,老是重启而没有返回按home键时的Activity
- [Python] regex正则的所有元字符文档
- HDOJ1010
- 很久没来CSDN了,看来离技术越来越远了
- 创建自定义控件2-自定义绘制
- C++赋值构造函数和赋值运算符的重载
- C#简单的面试题目(三)
- ZOJ 3604 Tunnel Network
- AJAX--显示加载中并弹出图层遮挡页面
- SVN简介
- SGU 111 大数开根号