模拟 3897: Catch the Mouse

http://www.tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=3897

猫捉老鼠

猫和老鼠一直走,直到碰壁或出界,则右转

技巧(方向%4)

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
char mp[15][15];
int ci,cj,mi,mj,ans=0,fm=0,fc=0;
int dir[4][2]={-1,0,0,1,1,0,0,-1};
void next()
{
    mi+=dir[fm][0];
    mj+=dir[fm][1];
    if(mi<1||mi>10||mj<1||mj>10||mp[mi][mj]=='*'){
        mi-=dir[fm][0];
        mj-=dir[fm][1];
        fm=(fm+1)%4;
    }
    ci+=dir[fc][0];
    cj+=dir[fc][1];
    if(ci<1||ci>10||cj<1||cj>10||mp[ci][cj]=='*'){
        ci-=dir[fc][0];
        cj-=dir[fc][1];
        fc=(fc+1)%4;
    }
}
void solve()
{
    while(1){
        if(ans==1e6)break;
        if(mi==ci&&mj==cj)break;
        next();
        ans++;
    }
}
int main()
{
    for(int i=1;i<=10;i++){
        for(int j=1;j<=10;j++){
            scanf("%c",&mp[i][j]);
            if(mp[i][j]=='M')mi=i,mj=j;
            else if(mp[i][j]=='C')ci=i,cj=j;
        }
        getchar();
    }
    solve();
    printf("%d\n",ans==1e6?0:ans);
    return 0;
}
View Code

猜你喜欢

转载自www.cnblogs.com/ydw--/p/11919738.html