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;
}
题意:
驴和老虎在一个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;
}
相关文章推荐
- 51单片机与Arduino通过nrf24l01无线模块通信
- poj 1458 Common Subsequence
- Handler异步更新Ui的机制
- [Express-03] Request对象
- @PathVariable和@RequestParam的区别,@SessionAttributes
- 删除vector中的重复数据(unique)
- POJ 1122 FDNY to the Rescue!(最短路径)
- iOS UIKit:viewController之动画(5)
- SoapUI测试WSDL文件
- Learn how to Use UIPageViewController in iOS
- iOS UIKit:viewController之Segues (4)
- 十大滤波算法程序大全(Arduino精编无错版)
- Xcode多种Build Configuration配置使用
- BurpSuite的使用总结
- UESTC 482 Charitable Exchange(优先队列+bfs)
- UESTC 482 Charitable Exchange(优先队列+bfs)
- GUI for git|SourceTree|入门基础
- [2016,CVPR] Learning Deep Feature Representations with Domain Guided Dropout for Person Re-id
- 优化UITableViewCell高度计算
- <LeetCode OJ> 347. Top K Frequent Elements