|
#include <iostream>
using namespace std;
const int M=10;
char map[2][M][M];
bool vis[2][M][M];
 int dx[]= {1,0,-1,0};
 int dy[]= {0,1,0,-1};

struct point
  {
int layer;
int x,y;
int time;
}Q[200];

bool BFS(int m,int n,int t)
  {
point now,next;
now.layer=now.x=now.y=now.time=0;
int Front=0;
int Near=1;
Q[Front]=now;
vis[now.layer][now.x][now.y]=true;
while(Front<Near)
 {
now=Q[Front++];
if(map[now.layer][now.x][now.y]=='P')
 {
if(now.time<=t)
return true;
return false;
}
if(map[now.layer][now.x][now.y]=='#')
now.layer=!now.layer;

if(map[now.layer][now.x][now.y]=='P')
 {
if(now.time<=t)
return true;
return false;
}
if(map[now.layer][now.x][now.y]=='*'||map[now.layer][now.x][now.y]=='#')
continue;
int k;
for(k=0;k<4;k++)
 {
next.layer=now.layer;
next.time=now.time+1;
next.x=now.x+dx[k];
next.y=now.y+dy[k];
if(!vis[next.layer][next.x][next.y]&&next.x>=0&&next.x<m&&next.y>=0&&next.y<n)
 {
Q[Near++]=next;
vis[next.layer][next.x][next.y]=true;
}
}
}
return false;
}
int main()
  {
int T;
scanf("%d",&T);
while(T--)
 {
int m,n,t;
scanf("%d%d%d",&m,&n,&t);
int i,j,k;
for(k=0;k<2;k++)
 {
for(i=0;i<m;i++)
 {
char s[M];
scanf("%s",&s);
for(j=0;j<n;j++)
 {
map[k][i][j]=s[j];
vis[k][i][j]=false;
}
}
}
if(BFS(m,n,t))
printf("YES\n");
else
printf("NO\n");
}
system("pause");
return 0;
}
|