Description
Input
Output
Sample Input
4 4 5 S.X. ..X. ..XD .... 3 4 5 S.X. ..X. ...D 0 0 0
Sample Output
NO YES
#include <stdio.h> #include <stdlib.h> #include <math.h> char map[9][9]; int n,m,t; int di,dj,escape; int dir[4][2]={{0,-1},{0,1},{1,0},{-1,0}}; void dfs(int si,int sj,int cnt) { int i,temp; if(si>n||sj>m||si<=0||sj<=0) return; if(si==di&&sj==dj&&cnt==t) { escape=1;return; } if(escape) return; temp=(t-cnt)-abs(si-di)-abs(sj-dj); if(temp<0||temp%2) return; for(i=0;i<4;i++) { if(map[si+dir[i][0]][sj+dir[i][1]]!='X') { map[si+dir[i][0]][sj+dir[i][1]]='X'; dfs(si+dir[i][0],sj+dir[i][1],cnt+1); map[si+dir[i][0]][sj+dir[i][1]]='.'; } } } int main() { int i,j; int si,sj; while(~scanf("%d%d%d",&n,&m,&t)) { if(n==0&&m==0&&t==0) break; int wall=0; char temp; scanf("%c",&temp); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { scanf("%c",&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++; } scanf("%c",&temp); } if(n*m-wall<=t) { printf("NO\n");continue; } escape=0; map[si][sj]='X'; dfs(si,sj,0); if(escape) printf("YES\n"); else printf("NO\n"); } return 0; }