• <FZU 1019>猫捉老鼠


    A - 猫捉老鼠
    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

    Description

    一只猫和一只老鼠在10*10的迷宫中。迷宫中的每个方格可以是空的,或者含有障碍。猫和老鼠可以进入任意一个空的方格中。当他们相遇时,猫和老鼠在同一个方格中。但是,无论猫或老鼠都不能进入有障碍的方格。我们可以用字符组成的二维数组表示迷宫,如下图所示。

    老鼠在迷宫中按照一种固定的方式行走:每个时刻,老鼠都向它所面对的方向前进一格,这需要花费1秒时间。如果前方是一个障碍或者是迷宫的边界,它将花1秒的时间按顺时针方向转90度。

    为了抓到老鼠,这只猫决定也按照与老鼠相同的行走方式行进。

    猫和老鼠在每个单位时间内是同时行动的。因此,如果猫和老鼠在行进过程中“擦肩而过”,猫是无法捉到老鼠的。只有当猫和老鼠同时到达一个相同的格子时,猫才能捉住老鼠。 
    初始时,猫和老鼠不会在同一个方格中。并且它们都面向北方。
    你的任务是编一个程序,求出猫捉到老鼠的所花时间。

    Input

    输入数据的第一行n,表示输入数据的组数。
    每组数据由10行组成,每行10个字符,表示迷宫的地图以及猫和老鼠的初始位置。输入数据保证只有一只猫和一只老鼠。
    每组输入数据之后均有一个空行作为间隔。 

    Output

    对于每组给定的输入,输出一行仅含一个数,即猫捉到老鼠所花的时间。如果猫永远都无法抓到老鼠,则输出0。

    Sample Input

    1
    *...*.....
    ......*...
    ...*...*..
    ..........
    ...*.c....
    *.....*...
    ...*......
    ..m......*
    ...*.*....
    .*.*......
    

    Sample Output

    49
    
    
    AC Code:
    //Memory: 228 KB		Time: 0 MS
    //Language: GNU C++		Result: Accepted
    
    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    struct Point
    {
        int x, y;
    }mou, cat; //mouse,cat的坐标
    int dm, dc; //分别为mouse和cat面朝的方向,0北,1东,2南,3西
    char map[10][11]; //切记预留一位存储‘\0’!T_T
    int t;//时间
    
    
    void Move (Point &animal, int &d)
    {
        int X,Y;
        if (d == 0)
        {
            X = animal.x, Y = animal.y;
            if(!Y || map[Y-1][X] == '*')
                d++;
            else
                animal.y--;
        }
        else if (d == 1)
        {
            X = animal.x+1, Y = animal.y;
            if (map[Y][X] == '\0' || map[Y][X] == '*')
                d++;
            else
                animal.x++;
        }
        else if(d == 2)
        {
            X=animal.x, Y=animal.y;
            if(Y==9 || map[Y+1][X]=='*')
                d++;
            else
                animal.y++;
        }
        else
        {
            X=animal.x, Y=animal.y;
            if(!X || map[Y][X-1] == '*')
                d = 0;
            else
                animal.x--;
        }
    }
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            t = dm = dc = 0;
            for(int i = 0; i < 10; i++)
            {
                scanf("%s", map[i]);
            }
            for(int i = 0; i < 10; i++)
                for(int j = 0; j < 10; j++)
                {
                    if(map[i][j] == 'c')
                    {
                        cat.y = i;
                        cat.x = j;
                    }
                    if(map[i][j] == 'm')
                    {
                        mou.y = i;
                        mou.x = j;
                    }
                }
            while (1)
            {
                t++;
                Move (cat, dc);
                Move (mou, dm);
                if (cat.x == mou.x && cat.y == mou.y) break;
                if (t > 500)
                {
                    t = 0;
                    break;
                }
            }
            printf ("%d\n", t);
        }
        return 0;
    }


  • 相关阅读:
    Python好酷|JSON字段校验库DeepDiff
    如何推动团队测试转型自动化测试
    Python好酷|allpairspy一款高效的正交实验法生成用例工具
    性能测试很简单JMeter性能测试实践
    接口测试框架开发实践2:接口自动化测试框架设计思路
    vscode添加python文件头模板(Mac版)
    Python|200行代码实现贪吃蛇小游戏
    如何有效提升软件测试质量?

    我的正版游戏
  • 原文地址:https://www.cnblogs.com/cszlg/p/2910583.html
Copyright © 2020-2023  润新知