Description
猫和老鼠在10*10的方格中运动,例如:
*...*.....
......*...
...*...*..
..........
...*.C....
*.....*...
...*......
..M......*
...*.*....
.*.*......
C=猫(CAT)
M=老鼠(MOUSE)
*=障碍物
.=空地
猫和老鼠每秒中走一格,如果在某一秒末他们在同一格中,我们称他们“相遇”。
注意,“对穿”是不算相遇的。猫和老鼠的移动方式相同:平时沿直线走,下一步如果会走到障碍物上去或者出界,就用1秒的时间做一个右转90度。一开始他们都面向北方。
编程计算多少秒以后他们相遇。
Input
第一行为一整数N,表示有N组测试数据。
每组测试数据为10行,格式如题目描述。
Output
Sample Input
1
*...*.....
......*...
...*...*..
..........
...*.C....
*.....*...
...*......
..M......*
...*.*....
.*.*......
Sample Output
49
KEY:我为了解题方便,在原图的四周,加上了‘ * ’这样就不怕出界了;
Source:

#include<iostream>
using namespace std;


int d1[4]=...{-1,0,1,0};

int d2[4]=...{0,1,0,-1};

char a[15][15];
struct node

...{
int x;
int y;
};

node C,M;

void init()

...{
int i,j;
for(i=0;i<=11;i++)
for(j=0;j<=11;j++)
a[i][j]='*';
}

void input()

...{
int i,j;
char c;
for(i=1;i<=10;i++)
for(j=1;j<=10;j++)

...{
cin>>c;
if(c=='M')

...{
M.x=i;
M.y=j;
}
if(c=='C')

...{
C.x=i;
C.y=j;
}
a[i][j]=c;
}
}

int count()

...{
int T=0;
int c=0,m=0;
while( !(M.x==C.x&&M.y==C.y)&&T<=1000)

...{
if(a[M.x+d1[m]][M.y+d2[m]]!='*')

...{
M.x+=d1[m];
M.y+=d2[m];
}
else

...{
m++;
m=m%4;
}

if(a[C.x+d1[c]][C.y+d2[c]]!='*')

...{
C.x+=d1[c];
C.y+=d2[c];
}
else

...{
c++;
c=c%4;
}
T++;
}
if(T==0||T>1000) return -1;
else return T;
}

int main()

...{
// freopen("fjnu_1409.in","r",stdin);
int N;
cin>>N;
for(int i=1;i<=N;i++)

...{
init();
input();
cout<<count()<<endl;
}
return 0;
}










