肯定是贵州老乡出的题,很简单的一个模拟题,稍微坑点的地方在如果开始两个出发点就相同的话,那么就直接输出,好了前几天网络赛就做这两题,不过一个人做还是有进步了,继续加油。
#include<cstdio>
#include<cstring>
int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int vis1[1005][1005];
int vis2[1005][1005];
int r1,c1,d1,r2,c2,d2,n;
void dfs(){
int flag1=1, flag2=1;
while(1){
if(flag1){
int x,y;
x=r1+dir[d1][0]; y=c1+dir[d1][1];
if(x>=0&&x<n&&y>=0&&y<n&&!vis1[x][y]){
r1=x; c1=y;
vis1[r1][c1]=1;
}
else{
d1=(d1+1)%4;
x=r1+dir[d1][0]; y=c1+dir[d1][1];
if(x>=0&&x<n&&y>=0&&y<n&&!vis1[x][y]){
r1=x; c1=y;
vis1[r1][c1]=1;
}
else { flag1=0; }
}
}
if(flag2){
int x,y;
x=r2+dir[d2][0]; y=c2+dir[d2][1];
if(x>=0&&x<n&&y>=0&&y<n&&!vis2[x][y]){
r2=x; c2=y;
vis2[r2][c2]=1;
}
else{
d2=(d2+3)%4;
x=r2+dir[d2][0]; y=c2+dir[d2][1];
if(x>=0&&x<n&&y>=0&&y<n&&!vis2[x][y]){
r2=x; c2=y;
vis2[r2][c2]=1;
}
else { flag2=0; }
}
}
if(!flag1&&!flag2)break;
if(r1==r2&&c1==c2)break;
}
}
int main(){
while(scanf("%d",&n)&&n){
scanf("%d %d %d",&r1,&c1,&d1);
scanf("%d %d %d",&r2,&c2,&d2);
if(r1==r2&&c1==c2)
{ printf("%d %d\n",r1,c1); continue; }
memset(vis1,0,sizeof(vis1));
memset(vis2,0,sizeof(vis2));
vis1[r1][c1]=1;
vis2[r2][c2]=1;
dfs();
if(r1==r2&&c1==c2)printf("%d %d\n",r1,c1);
else printf("-1\n");
}
return 0;
}