标签:
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 #include <stdlib.h> 5 using namespace std; 6 int T,si,sj,di,dj,n,m; 7 int tx[]={1,-1,0,0}; 8 int ty[]={0,0,-1,1}; 9 char a[105][105]; 10 bool flag; 11 void dfs(int x,int y,int t) 12 { 13 int i,xx,yy; 14 if(x==di&&y==dj&&t==T) 15 flag=true; 16 if(flag) 17 return ; 18 if((abs(di-x)+abs(dj-y))%2!=(T-t)%2)//如果需要走的步数和差的时间奇偶性不同不可能走出 19 return ; 20 for(i=0;i<4;i++) 21 { 22 xx=x+tx[i]; 23 yy=y+ty[i]; 24 if(xx>=0&&yy>=0&&xx<n&&yy<m&&a[xx][yy]!=‘X‘) 25 { 26 a[xx][yy]=‘X‘; 27 dfs(xx,yy,t+1); 28 a[xx][yy]=‘.‘; 29 } 30 } 31 } 32 int main() 33 { 34 int i,j; 35 while(cin >> n>>m>>T&&m&&n&&T) 36 { 37 int num=0; 38 flag=false; 39 for(i=0;i<n;i++) 40 for(j=0;j<m;j++) 41 { 42 cin >> a[i][j]; 43 if(a[i][j]==‘S‘) 44 { 45 si=i; 46 sj=j; 47 } 48 else if(a[i][j]==‘D‘) 49 { 50 di=i; 51 dj=j; 52 num++; 53 } 54 else if(a[i][j]==‘.‘) 55 num++; 56 } 57 a[si][sj]=‘X‘; 58 if(num>=T)//如果总的能走的路比时间小,不可能出去 59 dfs(si,sj,0); 60 if(flag) 61 cout << "YES"<<endl; 62 else 63 cout << "NO" << endl; 64 } 65 return 0; 66 }
标签:
原文地址:http://www.cnblogs.com/Annetree/p/5639091.html