标签:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 char maze[8][8]; 7 int n, m, t; 8 int mx, my, X, Y; 9 int flag, tt; 10 int Move[4][2]= {{-1,0},{1,0},{0,1},{0,-1}}; 11 void DFS(int x,int y,int k); 12 int main() 13 { 14 int i, j; 15 while(scanf("%d %d %d",&n,&m,&t)!=EOF, m||n||t) 16 { 17 tt = 0; 18 flag = 0; 19 getchar(); 20 for(i = 0; i < n; i++) 21 { 22 for(j = 0; j < m; j++) 23 { 24 scanf("%c",&maze[i][j]); 25 if(maze[i][j]==‘S‘) 26 { 27 mx = i; 28 my = j; 29 maze[mx][my]=‘X‘; 30 } 31 else if(maze[i][j]==‘D‘) 32 { 33 X = i; 34 Y = j; 35 tt++; 36 } 37 else if(maze[i][j]==‘.‘) 38 tt++; 39 } 40 getchar(); 41 } 42 if(tt>=t && abs(X-mx)+abs(Y-my)<=t)// && !(abs(X-mx)+abs(Y-my)-t)&1 不可以加 43 DFS(mx,my,0); 44 if(flag) 45 printf("YES\n"); 46 else 47 printf("NO\n"); 48 } 49 return 0; 50 } 51 void DFS(int x,int y,int k) 52 { 53 int i; 54 if(t==k && X==x && Y==y) 55 flag = 1; 56 if(flag) 57 return; 58 int v = t-k-abs(X-x)-abs(Y-y); 59 if(v<0||v&1) 60 return; 61 for(i=0; i<4; i++) 62 { 63 int xx=Move[i][0]+x; 64 int yy=Move[i][1]+y; 65 if(xx>=0 && xx<n && yy>=0 && yy<m && maze[xx][yy]!=‘X‘) 66 { 67 maze[xx][yy] = ‘X‘; 68 DFS(xx,yy,k+1); 69 maze[xx][yy] = ‘.‘; 70 } 71 } 72 }
1.奇偶剪枝
2.偶数判断 &1
HDU 1010 Tempter of the Bone_DFS
标签:
原文地址:http://www.cnblogs.com/tyx0604/p/4313207.html