1058-Tom and Jerry

描述

 

Tom和Jerry在10*10的方格中:

*...*.....

......*...

...*...*..

..........

...*.C....

*.....*...

...*......

..M......*

...*.*....

.*.*......

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

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

输入

10行,格式如上

输出

 

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

样例输入

*...*.....

......*...

...*...*..

..........

...*.C....

*.....*...

...*......

..M......* .

..*.*....

.*.*......

样例输出

49

#include <iostream>
using namespace std;
char s[12][12];
void meet(int &x,int &y,int &f)
{    
    if(f==1)
    {
        if(s[x-1][y]!='*')
            x--;
        else
        {
            f=2;
            return;
        }
    }
    if(f==2)
    {
        if(s[x][y+1]!='*')
            y++;
        else
        {
            f=3;
            return;
        }
    }
    if(f==3)
    {
        if(s[x+1][y]!='*')
            x++;
        else
        {
            f=4;
            return;
        }
    }
    if(f==4)
    {
        if(s[x][y-1]!='*')
            y--;
        else
        {
            f=1;
            return;
        }
    }
}
int main()
{
    //freopen("a.txt","r",stdin);
    int i,j,t=0;
    int a,b,c,d;
    for(i=-1;i<11;i++)
        for(j=-1;j<11;j++)
            s[i][j]='*';
    for(i=0;i<10;i++)
        for(j=0;j<10;j++)
        {
            cin>>s[i][j];
            if(s[i][j]=='C')
            {
                a=i;
                b=j;
            }
            if(s[i][j]=='M')
            {
                c=i;
                d=j;
            }
        }
    int f1=1,f2=1;
    while(a!=c||b!=d)
    {
        meet(a,b,f1);
        meet(c,d,f2);
        t++;
        if(t>100000)
        {
            t=-1;
            break;
        }
    }
    cout<<t<<endl;
    return 0;
}

  

原文地址:https://www.cnblogs.com/Rosanna/p/3436684.html