找最短路问题,用bfs
注意等于的时候也可以
#include
#include
#include
using namespace std;
char str[2][33][33];
int n, m, t;
struct node
{
int x, y, z;
int step;
node(){}
node(int zz, int xx, int yy, int ss)
{
x = xx; y = yy; z = zz; step = ss;
}
};
queue
que;
int dir[4][2] = { {1, 0}, {-1, 0}, {0, 1}, {0, -1} };
int bfs()
{
while(!que.empty()) que.pop();
que.push( node(0, 0, 0, 0) );
while(!que.empty())
{
node tmp = que.front(); que.pop();
if(tmp.step > t) return 0;
for(int i = 0; i < 4; i++)
{
int x = dir[i][0] + tmp.x;
int y = dir[i][1] + tmp.y;
int z = tmp.z;
if(0 <= x && x < n && 0 <= y && y < m)
{
if(str[z][x][y] == '.')
{
str[z][x][y] = '*';
que.push( node(z, x, y, tmp.step+1) );
}
if(str[z][x][y] == 'P')
{
// printf("%d\n", tmp.step+1);
if(t >= tmp.step+1) return 1;
else return 0;
}
if(str[z][x][y] == '#')
{
if(str[!z][x][y] == 'P')
{
// printf("%d\n", tmp.step+1);
if(t >= tmp.step+1) return 1;
else return 0;
}
if(str[!z][x][y] == '.')
{
str[!z][x][y] = '*';
que.push( node(!z, x, y, tmp.step+1) );
}
}
}
}
}
return 0;
}
int main(void)
{
int T;
scanf("%d", &T);
while(T--)
{
int i, j;
scanf("%d%d%d", &n, &m, &t);
for(j = 0; j < 2; j++)
for(i = 0; i < n; i++)
scanf("%s", str[j][i]);
if(bfs()) printf("YES\n");
else printf("NO\n");
}
return 0;
}