//普通广搜,两个传送门相对着那么骑士陷入循环困境(没考虑到)其次就是想法和代码实现的差距
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[20][20][3];
int book[20][20][3];//+层数标记
struct f{
int x,y,li,step;
}b[20*20*4];
int main(){
int t;
scanf("%d",&t);
while(t--){
int n,m,ti;
scanf("%d%d%d",&n,&m,&ti);getchar();//各种吃回车
int startx,starty,startli,endx,endy,endli;
for(int i=1;i<=2;i++){
for(int j=1;j<=n;j++)
{
for(int k=1;k<=m;k++)
{
scanf("%c",&a[j][k][i]);
if(a[j][k][i]=='S'){startx=j,starty=k,startli=i;}
if(a[j][k][i]=='P'){endx=j,endy=k,endli=i;}
}
getchar();
}
if(i==1) getchar();
}
memset(book,0,sizeof(book));//注意初始化
int head=0,tail=1,flag=0;//初始化
b[head].x=startx,b[head].y=starty,b[head].li=startli,b[head].step=0,book[startx][starty][startli]=1;//初始化
if(startx==endx&&starty==endy&&startli==endli){cout<<"YES"<<endl;continue;}//初始化
while(head<tail){
if(a[b[head].x][b[head].y][b[head].li]=='#'&&b[head].li==1){
b[head].li=2;
book[b[head].x][b[head].y][b[head].li]=1;
if(a[b[head].x][b[head].y][b[head].li]=='*'||a[b[head].x][b[head].y][b[head].li]=='#') {head++;continue;}//注意head++;
if(b[head].x==endx&&b[head].y==endy&&b[head].li==endli){flag=1;tail=head+1;break;}//在for循环前,注意flag,tail的变化,代码和想法的‘误差’
}
if(a[b[head].x][b[head].y][b[head].li]=='#'&&b[head].li==2){
b[head].li=1;
book[b[head].x][b[head].y][b[head].li]=1;
if(a[b[head].x][b[head].y][b[head].li]=='*'||a[b[head].x][b[head].y][b[head].li]=='#') {head++;continue;}
if(b[head].x==endx&&b[head].y==endy&&b[head].li==endli){flag=1;tail=head+1;break;}//tail=head+1;-wr
}
int next[4][3]={{0,1,0},{1,0,0},{0,-1,0},{-1,0,0}};//方向改成二维的即可(不改了,开始做时没审清题意关键)
for(int i=0;i<4;i++)
{
int tx=b[head].x+next[i][0],ty=b[head].y+next[i][1],tli=b[head].li+next[i][2];
if(tx<1||tx>n||ty<1||ty>m||tli<1||tli>2) continue;
if(a[tx][ty][tli]=='*'||book[tx][ty][tli]) continue;
book[tx][ty][tli]=1;
b[tail].x=tx,b[tail].y=ty,b[tail].li=tli,b[tail++].step=b[head].step+1;
if(tx==endx&&ty==endy&&tli==endli){flag=1;break;}
}
if(flag) break;
head++;
}
if(flag&&b[tail-1].step<=ti){cout<<"YES"<<endl;}
else {cout<<"NO"<<endl;}
}
return 0;
}
hdu_2102 A计划
最新推荐文章于 2021-12-09 22:58:21 发布