一个简单的搜索题,错了n次,哎,
注意:
传送无时间,传过去为‘#’则为死路。(刚开始想思路不紧密,把这茬忘了,)
#include<stdio.h>
#include<queue>
using namespace std;
#define N 15
struct node{ //队列,广搜;
int x,y,z,step;
};
int dir[4][2]={0,1, 0,-1, 1,0,-1,0};
char map[2][N][N];
int n,m,t;
bool judge(int x,int y,int z)
{
if(x>=0 && x<n && y>=0 && y<m && map[z][x][y]!='*')
return 1;
return 0;
}
int bfs()
{
queue<node>q;
struct node cur,next;
int k,x,y,z;
cur.x=cur.y=cur.z=cur.step=0;
q.push(cur);
map[0][0][0]='*';
while(!q.empty())
{
cur=q.front();
q.pop();
next.step=cur.step+1;
if(next.step>t)
continue;
for(k=0;k<4;k++)
{
next.x=x=cur.x+dir[k][0];
next.y=y=cur.y+dir[k][1];
next.z=z=cur.z;
if(map[z][x][y]=='#') //下一步是'#'直接走;
next.z=z=cur.z>0?0:1;
if(map[z][x][y]=='#')
continue;
if(judge(x,y,z))
{
if(map[z][x][y]=='P')
return 1;
map[z][x][y]='*';
q.push(next);
}
}
}
return 0;
}
int main ()
{
int d,i;
scanf("%d",&d);
while(d--)
{
scanf("%d%d%d",&n,&m,&t);
for(i=0;i<n;i++)
scanf("%s",map[0][i]);
for(i=0;i<n;i++)
scanf("%s",map[1][i]);
if(bfs())
puts("YES");
else
puts("NO");
}
return 0;
}