蓝桥杯 Cat And Mouse

 猫和老鼠在10×10的方格中运动(如图3-6),例如:
  *...*.....
  ......*...
  ...*...*..
  ..........
  ...*.C....
  *.....*...
  ...*......
  ..M......*
  ...*.*....
  .*.*......
  C=猫(CAT)
  M=老鼠(MOUSE)
  *=障碍物
  .=空地
  猫和老鼠每秒中走一格,如果在某一秒末它们在同一格中,我们称它们“相遇”。
  注意:“对穿”是不算相遇的。猫和老鼠的移动方式相同:平时沿直线走,下一步如果会走到障碍物上去或者出界,就用1秒的时间做一个右转90°。一开始它们都面向北方。
  编程计算多少秒以后他们相遇。
View problem
#include <bits/stdc++.h>
using namespace std;
#define ri register int 
#define M 100005

struct dian{
    int x,y,f;
}a,b;
int p[15][15];

void zou(dian &t)
{
    if(t.f==0)
    {
        if(p[t.y-1][t.x]==1||t.y==1)
        {
           t.f++;
        }
        else
        {
            t.y--;
        }
        return ;
    }
    if(t.f==1)
    {
        if(p[t.y][t.x+1]==1||t.x==10)
        {
           t.f++;
        }
        else
        {
            t.x++;
        }
        return ;
    }
    if(t.f==2)
    {
        if(p[t.y+1][t.x]==1||t.y==10)
        {
           t.f++;
        }
        else
        {
            t.y++;
        }
        return ;
    }
    if(t.f==3)
    {
        if(p[t.y][t.x-1]==1||t.x==1)
        {
           t.f=0;
        }
        else
        {
            t.x--;
        }
        return ;
    }
}
int main(){
    
    for(ri i=1;i<=10;i++)
    for(ri j=1;j<=10;j++)
    {
        char c;
        cin>>c;
        if(c=='*')
        {
         p[i][j]=1;    
        }
        if(c=='.') continue;
        if(c=='C')
        {
            a.x=j;
            a.y=i;
        }
        if(c=='M')
        {
            b.x=j;
            b.y=i;
        }
    }
    int cent=0;
    while(1)
    {
        cent++;
        zou(a);
        zou(b);
        if(a.x==b.x&&a.y==b.y)
        {
            printf("%d\n",cent);
            break;
        }
    }
    return 0;
}
View Code

 

posted @ 2021-12-14 21:07  VxiaohuanV  阅读(123)  评论(0编辑  收藏  举报