1 5 5 14 S*#*. .#... ..... ****. ...#. ..*.P #.*.. ***.. ...*. *.#..
YES
#include <iostream> #include <stdio.h> #include <string> #include <cstring> #include <cmath> #include <algorithm> #include <queue> using namespace std; char s[2][10][10]; int vis[2][10][10]; int flag; int TT; int n,m,T; struct Node { int x,y,k,tt; }f,t; int dis[4][2] = {0,1,0,-1,1,0,-1,0}; int check(int x,int y,int k) { if(x<0 || x>=n || y<0 || y>=m || s[k][x][y]=='*' || vis[k][x][y]) return 0; return 1; } queue<Node>q; int bfs() { while(!q.empty()) q.pop(); f.x=0;f.y=0;f.k=0;f.tt=0; q.push(f); while(!q.empty()) { f=q.front();q.pop(); if(s[f.k][f.x][f.y]=='P' && f.tt<=T) return 1; if(f.tt>T) return 0; for(int i=0;i<4;i++) { t.x=f.x+dis[i][0]; t.y=f.y+dis[i][1]; t.tt=f.tt+1; t.k=f.k; if(check(t.x,t.y,t.k)==0) continue; if(s[t.k][t.x][t.y]=='#') { t.k=(t.k+1)%2; if(s[t.k][t.x][t.y]=='*' || s[t.k][t.x][t.y]=='#') continue; //真可怕,居然还有一直穿梭在时光机中的状态,那不是进去了,就别想出来了。。。 vis[t.k][t.x][t.y]=1; q.push(t); } else { vis[t.k][t.x][t.y]=1; q.push(t); } } } return 0; } int main() { scanf("%d",&TT); while(TT--) { scanf("%d%d%d",&n,&m,&T); for(int i=0;i<2;i++) { for(int j=0;j<n;j++) scanf("%s",s[i][j]); } memset(vis,0,sizeof vis); if(bfs()) puts("YES"); else puts("NO"); } return 0; } //void dfs(int x,int y,int k,int tt) //{ // if(s[k][x][y]=='P' && tt<=t) // { // flag=1; // return; // } // if(flag) return; // if(s[k][x][y]=='*' || tt>t) return; // // for(int i=0;i<4;i++) // { // int xx=x+dis[i][0]; // int yy=y+dis[i][1]; // // if(check(xx,yy,k)==0) continue; // vis[k][xx][yy]=1; // // if(s[k][xx][yy]=='#') // { // vis[(k+1)%2][xx][yy]=1; // dfs( xx,yy,(k+1)%2,tt+1); // vis[(k+1)%2][xx][yy]=0; // } // else dfs(xx,yy,k,tt+1); // // vis[k][xx][yy]=0; // // if(flag) return; // } // //}