模拟。。。没啥好说。
#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;
}
}
}
}