【模拟】遭遇战


模拟。。。没啥好说。

#include<cstdio>
#include<cstring>
using namespace std;
int t,n,x1,x2,y1,y2,f1,f2,xx,yy,l,kkk,pd;
int fx[4]={0,1,0,-1},fy[4]={1,0,-1,0}; 
bool a[1001][1001],b[1001][1001];
int main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		scanf("%d%d%d",&x1,&y1,&f1);
		scanf("%d%d%d",&x2,&y2,&f2);
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		memset(c,0,sizeof(c));
		a[x1][y1]=1;b[x2][y2]=1;
		while(1){
			if(x1==x2&&y1==y2){  //符合条件
				printf("%d %d\n",x1,y1);
				break;
			}
			pd=0;
			xx=x1+fx[f1];yy=y1+fy[f1];
			kkk=4;
			while(kkk){
				if(a[xx][yy]==0&&xx<n&&yy<n&&xx>=0&&yy>=0){ //是否走得了
				    a[xx][yy]=1;
				    x1=xx;y1=yy;
				    break;
			    }
			    f1=(f1+1)%4;            //转向
			    xx=x1+fx[f1];yy=y1+fy[f1];
			    --kkk;
			}
			if(kkk==0) pd=1;   //动不了
			xx=x2+fx[f2];yy=y2+fy[f2];
			kkk=4;
			while(kkk){
				if(b[xx][yy]==0&&xx<n&&yy<n&&xx>=0&&yy>=0){ //是否走得了
				    b[xx][yy]=1;
				    x2=xx;y2=yy;
				    break;
			    }
			    f2=(f2+3)%4;     //转向
			    xx=x2+fx[f2];yy=y2+fy[f2];
			    --kkk;
			}
			if(kkk==0&&pd==1){  //俩人都动不了
				printf("-1\n");
				break;
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_42937087/article/details/89415592