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;

}

  

你可能感兴趣的:(JE)