(DFS)hdoj1010-Tempter of the Bone
2016-11-02 10:35
309 查看
#include<cstdio> #include<cmath> #include<stdlib.h> int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}},escape,n,m,t,si,sj,ei,ej; char a[10][10]; void dfs(int si,int sj,int cnt) { if(si<0||si>=n||sj<0||sj>=m) return ; if(si==ei&&sj==ej&&cnt==t) { escape=1; return; } int temp=t-cnt-abs(ei-si)-abs(ej-sj); if(temp<0||temp%2) return ; for(int i=0;i<4;i++) { if(a[si+dir[i][0]][sj+dir[i][1]]!='X') { a[si+dir[i][0]][sj+dir[i][1]]='X'; dfs(si+dir[i][0],sj+dir[i][1],cnt+1); if(escape) return; a[si+dir[i][0]][sj+dir[i][1]]='.'; } } return; } int main() { int wall=0; while(scanf("%d%d%d",&n,&m,&t)) { wall=0; escape=0; if(n==0&&m==0&&t==0) break; getchar(); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { scanf("%c",&a[i][j]); if(a[i][j]=='S') { si=i; sj=j; } if(a[i][j]=='X') wall++; if(a[i][j]=='D') { ei=i; ej=j; } } getchar(); } if(n*m-wall<=t) { printf("NO\n"); continue; } a[si][sj]='X'; dfs(si,sj,0); if(escape) printf("YES\n"); else printf("NO\n"); } return 0; }
正式开始学习和练习DFS、BFS,先从这DFS道中最入门的题开始。
关键:剪枝。
相关文章推荐
- hdoj 1010 Tempter of the Bone 【dfs+奇偶剪枝】
- HDOJ1010 Tempter of the Bone(DFS+奇偶剪枝)
- HDOJ.1010 Tempter of the Bone (DFS)
- HDOJ1010 Tempter of the Bone(DFS)
- hdoj 1010 Tempter of the Bone (dfs 奇偶剪枝)
- hdoj 1010 Tempter of the Bone【dfs查找能否在规定步数时从起点到达终点】【奇偶剪枝】
- HDOJ 1010 Tempter of the Bone DFS 奇偶优化
- HDOJ 1010 Tempter of the Bone(DFS奇偶剪枝)
- HDOJ1010 Tempter of the Bone(DFS)
- hdoj1010 Tempter of the Bone(迷宫问题dfs,奇偶剪枝)
- HDoj-1010-Tempter of the Bone-DFS
- 杭电OJ(HDOJ)1010题:Tempter of the Bone(DFS,迷宫求解)
- HDOJ 1010-Tempter of the Bone【dfs】
- zoj 2110 || hdoj 1010 Tempter of the Bone(DFS)
- HDOJ 1010 Tempter of the Bone--DFS+奇偶剪枝(转)
- hdoj 1010 Tempter of the Bone 【DFS】+【奇偶剪枝】
- HDOj 1010 Tempter of the Bone(DFS+奇偶性剪枝)
- HDOJ 1010 Tempter of the Bone
- HDU 1010 Tempter of the Bone - (DFS) 奇偶剪枝
- hdoj 1010 Tempter of the Bone(深搜剪枝)