博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛古P1518—两只塔姆沃斯牛
阅读量:3959 次
发布时间:2019-05-24

本文共 2116 字,大约阅读时间需要 7 分钟。

题目描述

两只牛逃跑到了森林里。Farmer John 开始用他的专家技术追捕这两头牛。你的任务是模拟他们的行为(牛和 John)。

追击在 10×1010 \times 1010×10 的平面网格内进行。一个格子可以是:一个障碍物,两头牛(它们总在一起),或者 Farmer John。两头牛和 Farmer John 可以在同一个格子内(当他们相遇时),但是他们都不能进入有障碍的格子。

一个格子可以是:

. 空地;* 障碍物;C 两头牛;F Farmer John。

这里有一个地图的例子:

*...*...........*......*...*...............*.F....*.....*......*........C......*...*.*.....*.*......

牛在地图里以固定的方式游荡。每分钟,它们可以向前移动或是转弯。如果前方无障碍(地图边沿也是障碍),它们会按照原来的方向前进一步。否则它们会用这一分钟顺时针转 90 度。 同时,它们不会离开地图。

Farmer John 深知牛的移动方法,他也这么移动。

每次(每分钟)Farmer John 和两头牛的移动是同时的。如果他们在移动的时候穿过对方,但是没有在同一格相遇,我们不认为他们相遇了。当他们在某分钟末在某格子相遇,那么追捕结束。

读入十行表示地图。每行都只包含 10 个字符,表示的含义和上面所说的相同。保证地图中只有一个 F 和一个 C。F 和 C 一开始不会处于同一个格子中。

计算 Farmer John 需要多少分钟来抓住他的牛,假设牛和 Farmer John 一开始的行动方向都是正北(即上)。 如果 John 和牛永远不会相遇,输出 0。

输入格式

输入共十行,每行 10 个字符,表示如上文描述的地图。

输出格式

输出一个数字,表示 John 需要多少时间才能抓住牛们。如果 John 无法抓住牛,则输出 0。

输入输出样例
输入 #1

*...*...........*......*...*...............*.F....*.....*......*........C......*...*.*.....*.*......

输出 #1

49

解题思路:

模拟,把每次牛和农夫走的点都进行对比,如果相等就输出时间,我假如时间大于50000就是代表不会相遇

程序代码:

#include
char s[20][20];int next[4][2]={
{
-1,0},{
0,1},{
1,0},{
0,-1}};int tx1,ty1,tx2,ty2;int main(){
int i,j,k1,k2,n,m,p1,q1,p2,q2,flag,sum,v1,v2,w1,w2; sum=0; for(i=0;i<10;i++) scanf(" %s",s[i]); for(i=0;i<10;i++) for(j=0;j<10;j++) {
if(s[i][j]=='F') {
tx1=p1=i;ty1=q1=j; } if(s[i][j]=='C') {
tx2=p2=i;ty2=q2=j; } } flag=0; v1=v2=-1; w1=w2=0;//最初农夫和牛向北方向走 k1=k2=0; //记录旋转的方向 while(1) {
sum++; tx1=tx1+v1; ty1=ty1+w1; if(ty1<0||ty1>9||tx1<0||tx1>9||s[tx1][ty1]=='*')//防止数组会越界 {
k1++; tx1=p1;ty1=q1; //如果走到墙或者走出的区域则让坐标还是等于上一步坐标,该步为旋转方向 v1=next[k1%4][0];w1=next[k1%4][1]; } else {
p1=tx1;q1=ty1;//把农夫的坐标保存一下 } tx2=tx2+v2; ty2=ty2+w2; if(tx2<0||tx2>9||ty2<0||ty2>9||s[tx2][ty2]=='*') {
k2++; tx2=p2;ty2=q2; v2=next[k2%4][0];w2=next[k2%4][1]; } else {
p2=tx2;q2=ty2; } //printf("%d %d %d %d\n",p2,q2,p1,q1); if(p1==p2&&q1==q2)//比较两个坐标是否相等 {
flag=1;break; } if(sum>50000) break; } if(flag==1) printf("%d\n",sum); else printf("0\n"); return 0; }

转载地址:http://grxzi.baihongyu.com/

你可能感兴趣的文章