重点:学会用数字加减取余表示方向
#include<cstdio>
char mp[15][15];
int x1,y1,x2,y2,k1=0,k2=0,t=0;//k=0,1,2,3分别代表北,东,南,西
void cback(){
switch(k1){
case 0:{
if(mp[x1-1][y1]=='*'||x1-1<0){
k1=(k1+1)%4;//顺时针转向
}else{
x1--;//向上走一步;
}
break;
}
case 1:{
if(mp[x1][y1+1]=='*'||y1+1>=10){
k1=(k1+1)%4;
}else{
y1++;
}
break;
}
case 2:{
if(mp[x1+1][y1]=='*'||x1+1>=10){
k1=(k1+1)%4;
}else{
x1++;
}
break;
}
case 3:{
if(mp[x1][y1-1]=='*'||y1-1<0){
k1=(k1+1)%4;
}else{
y1--;
}
break;
}
}
}
void fback(){
switch(k2){
case 0:{
if(mp[x2-1][y2]=='*'||x2-1<0){
k2=(k2+1)%4;
}else{
x2--;//向上走一步;
}
break;
}
case 1:{
if(mp[x2][y2+1]=='*'||y2+1>=10){
k2=(k2+1)%4;
}else{
y2++;
}
break;
}
case 2:{
if(mp[x2+1][y2]=='*'||x2+1>=10){
k2=(k2+1)%4;
}else{
x2++;
}
break;
}
case 3:{
if(mp[x2][y2-1]=='*'||y2-1<0){
k2=(k2+1)%4;
}else{
y2--;
}
break;
}
}
}
int main(){
for(int i=0;i<10;i++){
scanf("%s",mp[i]);
}
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
if(mp[i][j]=='C'){
x1=i;
y1=j;
}
if(mp[i][j]=='F'){
x2=i;
y2=j;
}
}
}
while(1){
cback();//牛走
fback();//人走
t++;
//printf("x1=%d y1=%d k1=%d t=%d\n",x1,y1,k1,t);
//printf("x2=%d y2=%d k2=%d t=%d\n",x2,y2,k2,t);
if(x1==x2&&y1==y2){
break;
}
if(t>1000){
printf("0");
return 0;
}
}
printf("%d",t);
return 0;
}