DFS can be resolved.
#include <cstdio>#include<iostream>#include<fstream>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#include<queue>#defineRep (I, L, R) for (int i=l; i<=r; i++)#defineDown (i, L, R) for (int i=l; i>=r; i--)#defineMAXN 23#defineMAX 1<<30using namespacestd;intN, M, T, map[2][MAXN][MAXN], SX, SY, SZ, TX, Ty, TZ, d[2][MAXN][MAXN];Chars[ the];voidSearch (intZintXintYintc) { if(Map[z][x][y] <0)return; if(D[z][x][y] <= c)return;ElseD[z][x][y] =C; if(Map[z][x][y] >0) Search (1-z, x, y, c); Else{Search (z, x, y+1, c+1); Search (z, x, y-1, c+1); Search (z, x+1, Y, c+1); Search (z, x-1, Y, c+1); }}intMain () {intT scanf"%d", &T); while(t--) {scanf ("%d%d%d", &n, &m, &t); Rep (I,1, N) {scanf ("%s", s); Rep (J,1, M)if(s[j-1] =='S') SX = i, sy = j, Sz =0, map[0][I][J] =0; Else if(s[j-1] =='P') tx = i, Ty = j, tz =0, map[0][I][J] =0; Else if(s[j-1] =='*') map[0][I][J] =-1; Else if(s[j-1] =='#') map[0][I][J] =1; Elsemap[0][I][J] =0; } Rep (I,1, N) {scanf ("%s", s); Rep (J,1, M)if(s[j-1] =='S') SX = i, sy = j, Sz =1, map[1][I][J] =0; Else if(s[j-1] =='P') tx = i, Ty = j, tz =1, map[1][I][J] =0; Else if(s[j-1] =='*') map[1][I][J] =-1; Else if(s[j-1] =='#') map[1][I][J] =1; Elsemap[1][I][J] =0; } Rep (I,0, n+1) map[0][i][0] = map[0][i][m+1] = map[1][i][0] = map[1][i][m+1] = -1; Rep (I,0, m+1) map[0][0][i] = map[0][n+1][i] = map[1][0][i] = map[1][n+1][i] =-1; Rep (Z,0,1) Rep (X,1, N) Rep (Y,1, m) D[z][x][y] =MAX; Search (SZ, SX, SY,0); if(D[tz][tx][ty] <= t) printf ("yes\n");Elseprintf"no\n"); } return 0;}
View Code
HDU-2102 a plan