#include<iostream> #include<string> #include<stdio.h> using namespace std; int main() { // freopen("e://1019.txt","r",stdin);//把已有的测试数据放到txt文档里来读入测试。 int sum,i,j,k,m,n,e,f; long int time; char a[12][12],ch;//定义大一点的数组,使周边都初始化为'*' memset(a,'*',sizeof(a)); while(scanf("%d",&sum)!=EOF) { getchar(); for(i=0;i<sum;i++) { for(k=1;k<11;k++) { for(j=1;j<11;j++) { ch=getchar(); a[k][j]=ch; } getchar(); } getchar(); time=0; for(j=1;j<11;j++)//确定位置 for(k=1;k<11;k++) { if(a[j][k]=='c')//猫的位置 { m=j; n=k; } if(a[j][k]=='m')//老鼠的位置 { e=j; f=k; } } int c=0,d=0; while(m!=e||n!=f)//只要有一个不等就继续走下去 { //刚开始我用if语句,但这样不行,当转过弯后要笔直走直到遇到‘*’ switch(c) //这样就只可用switch语句,来实现碰到*就转弯。 { case 0: if(a[m-1][n]!='*') { ++time;m-=1;break;} else { ++time;c=1;break;} case 1: if(a[m][n+1]!='*') { ++time;n+=1;break;} else {++time;c=2;break;} case 2: if(a[m+1][n]!='*') {++time;m+=1;break;} else {++time;c=3;break;} case 3: if(a[m][n-1]!='*') {++time;n-=1;break;} else {++time;c=0;break;} } switch(d) { case 0: if(a[e-1][f]!='*') { e-=1;break;} else { d=1;break;} case 1: if(a[e][f+1]!='*') {f+=1;break;} else {d=2;break;} case 2: if(a[e+1][f]!='*') {e+=1;break;} else {d=3;break;} case 3: if(a[e][f-1]!='*') {f-=1;break;} else {d=0;break;} } if(time>500)//永远捉不到的情况 { time=0; break; } } cout<<time<<endl; } } return 0; }