只AC了3个 #3 #6 #8,其它全WA
#include<iostream>
#include<cstdio>
using namespace std;
int fx,fy,cx,cy,ft,ct;
int map[13][13];
//边界/障碍 0 空地 3 人 1 牛 2 空地 3 空地+人 4 空地+牛 5 空地+人+牛 6
void showMap(){
printf("-----------------------\n");
for(int i=0;i<=11;++i){
for(int j=0;j<=11;++j){
printf("%d ",map[i][j]);
}
printf("\n");
}
printf("-----------------------\n");
}
int main(){
char x;
for(int i=1;i<=10;++i){
for(int j=1;j<=10;++j){
x=getchar();
switch(x){
case '*':map[i][j]=0;break;
case 'F':map[i][j]=4;fx=i;fy=j;break;
case 'C':map[i][j]=5;cx=i;cy=j;break;
case '.':map[i][j]=3;break;
}
}
getchar();
}
//showMap();
int cnt,i,j;
for(cnt=1;cnt<=10000000;++cnt){
switch(ft){
case 0:i=-1;j=0;break;
case 1:i=0;j=1;break;
case 2:i=1;j=0;break;
case 3:i=0;j=-1;break;
}
if(map[fx+i][fy+j]!=0){
map[fx][fy]-=1;
fx+=i;fy+=j;
map[fx][fy]+=1;
}else{
ft=(ft+1)%4;
}
switch(ct){
case 0:i=-1;j=0;break;
case 1:i=0;j=1;break;
case 2:i=1;j=0;break;
case 3:i=0;j=-1;break;
}
if(map[cx+i][cy+j]!=0){
map[cx][cy]-=2;
cx+=i;cy+=j;
map[cx][cy]+=2;
}else{
ct=(ct+1)%4;
}
if(map[cx][cy]==6){
cout<<cnt<<endl;
return 0;
}
}
cout<<0<<endl;
return 0;
}