#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <vector> #include <algorithm> using namespace std; const int maxn=1010; int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; int n,t1,t2,flag,p,q; int donkey[maxn][maxn],tiger[maxn][maxn]; void dfs(int step,int a,int b,int c,int x,int y,int z) { donkey[a][b]=1; tiger[x][y]=1; if(flag)return; if(a==x&&b==y) { flag=1; cout<<a<<" "<<b<<endl; return; } if(p&&q)//都停止了,就不能相遇了。 { flag=1; cout<<-1<<endl; return; } int xx,yy,aa,bb; if(p){aa=a;bb=b;} else{ aa=a+dir[c][0]; bb=b+dir[c][1]; if(aa<0||bb<0||aa>=n||bb>=n||donkey[aa][bb]==1) { c=(c+1)%4; aa=a+dir[c][0]; bb=b+dir[c][1]; if(aa<0||bb<0||aa>=n||bb>=n||donkey[aa][bb]==1){p=1;aa=a;bb=b;} } } if(q){xx=x;yy=y;} else{ xx=x+dir[z][0]; yy=y+dir[z][1]; if(xx<0||yy<0||xx>=n||yy>=n||tiger[xx][yy]==1) { z=(z-1+4)%4; xx=x+dir[z][0]; yy=y+dir[z][1]; if(xx<0||yy<0||xx>=n||yy>=n||tiger[xx][yy]==1){q=1;xx=x;yy=y;} } } dfs(step+1,aa,bb,c,xx,yy,z); } int main() { int a,b,c,x,y,z; while(cin>>n) { if(n==0)break; cin>>a>>b>>c>>x>>y>>z; if(a==x&&b==y){cout<<a<<" "<<b<<endl;continue;} //if(((a+b)%2==1&&(x+y)%2==0)||((a+b)%2==0&&(x+y)%2==1))cout<<-1<<endl; else{ memset(donkey,0,sizeof(donkey)); memset(tiger,0,sizeof(tiger)); flag=p=q=0; dfs(0,a,b,c,x,y,z); } } return 0; } /* 在n*n格子中,有一只老虎和一只驴。一开始告诉你各自的位置和方向。驴和老虎会沿方向一直跑,直到不能跑,需要拐弯。 拐弯,老虎必定向左,驴必定向右。如果拐弯后还是不能前进,则停止。问是否相遇。 注意:1.老虎和驴都不能跑自己去过的位置,但对方去过的可以去。(一开始忘了这个条件,怎么也wa不出来,555) 2.老虎和驴相遇的条件是同一时间在同一格子内,否则及时相遇也会穿过。如样例1; 深搜一遍就OK了,一开始加了特判,错了,早知道不加了。特判是符合正常状况,但我忘了,有一个停止的是否特判就不 成立了。(特判:横纵坐标相加为奇(偶)的,下一格必定为偶(奇),所以一奇一偶的是否必定不相遇,可一方停止后就出问题了。) */