0
点赞
收藏
分享

微信扫一扫

A计划 HDU - 2102

耳一文 2022-08-22 阅读 89


​​A计划 HDU - 2102​​​
不难,挺简单的bfs,跳过坑点就好。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
int n,m,t;
const int N=15;
const int dx[]={0,0,1,-1};
const int dy[]={1,-1,0,0};
char board[2][N][N];
bool vis[2][N][N];
struct node{
int x,y;
int z;
int t;
};
bool bfs()//wa 为啥压
{
int flag=0;
memset(vis,0,sizeof(vis));
queue<node> q;
node u;
vis[0][0][0]=1;
u.x=0,u.y=0,u.z=0,u.t=0;
q.push(u);
while(!q.empty())
{
node u=q.front();
q.pop();
if(u.t<=t&&board[u.z][u.x][u.y]=='P') return true;
if(u.t>t) return false;
for(int i=0;i<4;i++)
{
node nu=u;
nu.x+=dx[i];
nu.y+=dy[i];
if(nu.x>=0&&nu.x<n&&nu.y>=0&&nu.y<m&&board[nu.z][nu.x][nu.y]!='*'&&!vis[nu.z][nu.x][nu.y])
{

if(board[nu.z][nu.x][nu.y]=='#')
{
vis[nu.z][nu.x][nu.y]=1;
nu.z=(nu.z==0?1:0);
vis[nu.z][nu.x][nu.y]=1;
if(board[nu.z][nu.x][nu.y]!='*'&&board[nu.z][nu.x][nu.y]!='#')//传输过去有you是# 遗漏一
nu.t+=1,q.push(nu);//一直认为,这儿传送门所以不给时间加一,后来明白,走到这一步的时候是要时间加一的
}
else //'.'和P
{
nu.t+=1;
vis[nu.z][nu.x][nu.y]=1;
q.push(nu);

}
}
}
}
return false;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&m,&t);
for(int i=0;i<2;i++)
for(int j=0;j<n;j++)
scanf("%s",board[i][j]);
if(bfs()) printf("YES\n");
else printf("NO\n");

}

return 0;
}


举报

相关推荐

0 条评论