描述 小林和小华在一个 n×n 的矩形方格里玩游戏,矩形左上角为(0,0),右下角为(n-1,n-1)。 两人同时进入地图的随机位置,并以相同速度进行走位。为了隐蔽性,两人都不会再走自己走过的格子。如果两人向某一方向前进,那么他们会跑到不能跑为止,当不能跑的时候,小林会向右转,小华则会向左转,如果不能跑,则不再动。 现在已知两人进入地图的初始位置和方向,请算出两人遭遇的位置。
输入 第 1 行 1 个正整数 t,表示测试数据组数,1≤t≤10。接下来的 t 组数据,每组数据的第 1 行包含 1 个整数 n,1≤n≤1000。第 2 行包含 3 个整数 x、y 和 d,表示小林的初始位置和一开始跑的方向。其中,d=0 表示东; d=1 表示南;d=2 表示西;d=3 表示北。第 3 行与第 2 行格式相同,但描述的是小华。
输出 输出 t 行,若会遭遇,则包含两个整数,表示他们第一次相遇格子的坐标,否则输出“-1”。
输入样例 1
2 2 0 0 0 0 1 2 4 0 1 0 3 2 0
输出样例 1
-1 1 3
时间限制 1000MS 内存限制 256MB IO 类型 Standard IO 出题人 root 难度 低 分数 100
#include<iostream>
using namespace std;
int dx[]={1,0,-1,0},
dy[]={0,-1,0,1};
int a[1005][1005];
int n;
int x1,x2,y1,y2,d1,d2;
void dfs(int x1,int y1,int x2,int y2,int d1,int d2)
{
int bx1=x1+dx[d1],by1=y1+dy[d1];
if(a[bx1][by1]!=1&&bx1<n&&by1<n&&bx1>=0&&by1>=0)
{
a[bx1][by1]=1;
}
else
{
bx1=x1+dx[0],by1=y1+dy[0];
if(a[bx1][by1]!=1&&bx1<n&&by1<n&&bx1>=0&&by1>=0)
{
a[bx1][by1]=1;
}
else
{
cout<<"-1"<<endl;
return;
}
}
int bx2=x2+dx[d2],by2=y2+dy[d2];
if(a[bx2][by2]!=2&&bx2<n&&by2<n&&bx2>=0&&by2>=0)
{
a[bx2][by2]=2;
}
else
{
bx2=x2+dx[2],by2=y2+dy[2];
if(a[bx2][by2]!=2&&bx2<n&&by2<n&&bx2>=0&&by2>=0)
{
a[bx2][by2]=2;
}
else
{
cout<<"-1"<<endl;
return;
}
}
if(bx1==bx2&&by1==by2)
{
cout<<bx1<<" "<<by1<<endl;
return;
}
else
{
dfs(bx1,by1,bx2,by2,d1,d2);
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n;
cin>>x1>>y1>>d1;
cin>>x2>>y2>>d2;
a[x1][y1]=1;a[x2][y2]=2;
dfs(x1,y2,x2,y2,d1,d2);
}
return 0;
}
样例都输出-1,求调,谢谢!