现在的位置: 首页 > 综合 > 正文

hdu 2102 A计划

2018年12月27日 ⁄ 综合 ⁄ 共 1077字 ⁄ 字号 评论关闭

搜索的题就是要细心

 

 

 

 

 

 

#include<stdio.h>
#include<string.h>
#include<queue>
#define inf 0x3fffffff
using namespace std;
int vis[2][11][11];
char map[2][11][11];
int n,m,T;
int dir[4][2]={0,1,1,0,0,-1,-1,0};
struct op
{
	int k,x,y,step;
};
int judge(int k,int x,int y)
{
	if(x<0||x>=n||y<0||y>=m||map[k][x][y]=='*')
		return 0;
	return 1;
}
int bfs()
{
	int i,x,y,step,k;
	queue<op>Q;
	op cur,next;
	cur.k=0;
	cur.x=0;
	cur.y=0;
	cur.step=0;
	Q.push(cur);
	vis[0][0][0]=0;
	while(!Q.empty())
	{
		cur=Q.front();
		Q.pop();
		if(cur.step>T)continue;
		if(map[cur.k][cur.x][cur.y]=='P')
			return cur.step;
		
		for(i=0;i<4;i++)
		{
			x=cur.x+dir[i][0];
			y=cur.y+dir[i][1];
			k=cur.k;
			step=cur.step+1;
			
			if(map[k][x][y]=='#')
			{
				k=(k+1)%2;
				if(map[k][x][y]=='#'||map[k][x][y]=='*')
					continue;
			}
			if(judge(k,x,y)==0)continue;
			if(vis[k][x][y]>step)
			{
				vis[k][x][y]=step;
				next.k=k;
				next.step=step;
				next.x=x;
				next.y=y;
				Q.push(next);
			}
		}
	}
	return -1;
}
int main()
{
	int t,i,j,p;
	scanf("%d",&t);
	while(t--)
	{
		for(i=0;i<2;i++)
			for(j=0;j<11;j++)
				for(p=0;p<11;p++)
					vis[i][j][p]=inf;
		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]);
		j=bfs();
		if(j==-1)
			puts("NO");
		else puts("YES");
	}
	return 0;
}

 

抱歉!评论已关闭.