模拟 3897: Catch the Mouse
http://www.tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=3897
猫捉老鼠
猫和老鼠一直走,直到碰壁或出界,则右转
技巧(方向%4)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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; }