Tom and Jerry

本文介绍了一种解决Tom和Jerry在网格地图中追逐问题的算法。通过编程模拟两者在遇到障碍物时的转向行为,最终计算出两者相遇所需的时间。若在限定步数内无法相遇,则输出特定值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • Description

Tom和Jerry在10*10的方格中:
…..
……*…
..
……….
…*.C….
…..
…*……
..M……*
.….
..……

C=Tom(猫)
M=Jerry(老鼠)
*=障碍物
.=空地

他们各自每秒中走一格,如果在某一秒末他们在同一格中,我们称他们“相遇”。注意,“对穿”是不算相遇的。
他们移动方式相同:平时沿直线走,下一步如果会走到障碍物上去或者出界,就用1秒的时间做一个右转90度。一开始他们都面向北方。
编程计算多少秒以后他们相遇。

  • Input

10行,格式如上

  • Output

相遇时间T。如果无解,输出-1。

  • Sample Input

…..
……*…
..
……….
…*.C….
…..
…*……
..M……*
.….
..……

  • Sample Output

49

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    char a[12][12]={"************","*          *","*          *","*          *","*          *","*          *",\
    "*          *","*          *","*          *","*          *","*          *","************"};
    int i,j,x1,x=1,y=1,y1,x2,y2,m,n,count=0;//char a[6][6]={"*****","*.*C.*","*.*..*","*..M.*","******"};
    for(i=1;i<=10;i++)
    {
        for(j=1;j<=10;j++)
        {    a[i][j]=getchar();if(a[i][j]=='C')x1=i,y1=j;if(a[i][j]=='M')x2=i,y2=j;}
        getchar();
    }
        for(i=x1,j=y1,m=x2,n=y2;count<50000000;)
        {
            switch(x)
            {case 1:if(a[i-1][j]!='*'){i--;x=1;break;}else x=2;break;
            case 2:if(a[i][j+1]!='*'){j++;x=2;break;}else x=3;break;
            case 3:if(a[i+1][j]!='*'){i++;x=3;break;}else x=4;break;
            case 4:if(a[i][j-1]!='*'){j--;x=4;break;}else x=1;break;
            }
            switch(y)
            {repeat2:case 1:if(a[m-1][n]!='*'){m--;y=1;break;}else y=2;break;
            case 2:if(a[m][n+1]!='*'){n++;y=2;break;}else y=3;break;
            case 3:if(a[m+1][n]!='*'){m++;y=3;break;}else y=4;break;
            case 4:if(a[m][n-1]!='*'){n--;y=4;break;}else y=1;break;
            }
            count++;
            if(i==m&&n==j)
                break;
        }
        if(count==50000000)
            printf("-1\n");
        else
        printf("%d\n",count);
        return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值