您的位置:首页 > 产品设计 > UI/UE

The Donkey of Gui Zhou驴和老虎是否相遇问题(hdu4704)

2016-05-04 20:29 459 查看
点击打开链接

       题意:

                       驴和老虎在一个N*N的格子中走..若驴碰到了边界或者自己走过的位置就会向右转(顺时针)后再向前走,若老虎碰到了边界或者自己走过的位置就会向左转(逆时针)后再向前走..但是在一次转向后又需要转向则停下来了,每个单位时间他们都向前走一格(或者停住了)问驴和老虎能否相遇。

将1-n乘以1-n的格子都置为0(输出时坐标要减一),其余格子都置为-1;p1标记驴能走的路,0能走,-1不能走;则A按方向走遇到-1就要做选择,若A没遇到-1则按方向走,若A的下一步为-1,则判断它的右手边那个是否为-1,若为-1则停,否则向右走,并把走过的标为-1,同时更新方向a1;B也一样判断;终止条件为两者坐标相等,或两者都停了。

#include<iostream>
using namespace std;
#include<cstring>
int n,a1,a2,key=0,stop=0,s1,s2,s3,s4,tp1,tp2,p1[1005][1005],p2[1005][1005];
void dfs(int x1,int y1,int x2,int y2)
{
if(x1==x2&&y1==y2)
{
cout<<x1-1<<' '<<y1-1<<endl;
key=1;
return;
}
if(stop==2)
{
cout<<-1<<endl;
key=1;
return;
}
p1[x1][y1]=-1;p2[x2][y2]=-1;
if(tp1==0)
{
if(a1==0)
{
if(p1[x1][y1+1])
{
if(p1[x1+1][y1])
{
stop++;
tp1=1;
}
else
{
x1++;
a1=1;
}
}
else
y1++;
}
else
{
if(a1==1)
{
if(p1[x1+1][y1])
{
if(p1[x1][y1-1])
{
stop++;
tp1=1;
}
else
{
y1--;
a1=2;
}
}
else
x1++;
}
else
{
if(a1==2)
{
if(p1[x1][y1-1])
{
if(p1[x1-1][y1])
{
stop++;
tp1=1;
}
else
{
x1--;
a1=3;
}
}
else y1--;
}
else
if(a1==3)
{
if(p1[x1-1][y1])
{
if(p1[x1][y1+1])
{
stop++;
tp1=1;
}
else
{
y1++;
a1=0;
}
}
else x1--;
}
}
}
}
if(tp2==0)
{
if(a2==0)
{
if(p2[x2][y2+1])
{
if(p2[x2-1][y2])
{
stop++;
tp2=1;
}
else
{
x2--;
a2=3;
}
}
else
y2++;
}
else
{
if(a2==1)
{
if(p2[x2+1][y2])
{
if(p2[x2][y2+1])
{
stop++;
tp2=1;
}
else
{
y2++;
a2=0;
}
}
else
x2++;
}
else
{
if(a2==2)
{
if(p2[x2][y2-1])
{
if(p2[x2+1][y2])
{
tp2=1;
stop++;
}
else
{
x2++;
a2=1;
}
}
else y2--;
}
else
if(a2==3)
{
if(p2[x2-1][y2])
{
if(p2[x2][y2-1])
{
stop++;
tp2=1;
}
else
{
y2--;
a2=2;
}
}
else x2--;
}
}
}
}
dfs(x1,y1,x2,y2);
if(key==1)return;
}
int main()
{
int x1,x2,y1,y2;
while(cin>>n)
{
if(n==0)break;
memset(p1,-1,sizeof(p1));
memset(p2,-1,sizeof(p2));
for(int i=1;i<=n;i++)
for(int k=1;k<=n;k++)
{
p1[i][k]=0;
p2[i][k]=0;
}
key=0;
stop=0;
tp1=0;
tp2=0;
cin>>x1>>y1>>a1;
cin>>x2>>y2>>a2;
s1=s2=s3=s4=-1;
dfs(x1+1,y1+1,x2+1,y2+1);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: