zoukankan      html  css  js  c++  java
  • 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;
    }
    

      

  • 相关阅读:
    企业库连接形式简单例子记录 EnterpriseLibrary.Data
    .net 抽象类(abstract)和接口(interface)区别
    windows service 开发、安装及调试
    asp.net(mvc) 框架
    获取IP地址
    select2 模糊查询远程数据
    设计模式篇——初探命令模式
    初探MVC路由
    初探表达式目录树
    C#实现插入排序法
  • 原文地址:https://www.cnblogs.com/Rosanna/p/3436684.html
Copyright © 2011-2022 走看看