猫和老鼠

发布时间 2023-07-21 20:21:17作者: 爱吃泡面的皮卡
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char** argv) {
    int N,x,y,X,Y;
    cin>>N;
    for(int k=0;k<N;k++){
        int m=0,c=0,count=0;
        string Map[10];
        for(int j=0;j<10;j++){
            cin>>Map[j];
        }
        for(int i=0;i<10;i++){
            for(int j=0;j<10;j++){
                if(Map[i][j]=='C'){
                    X=i;
                    Y=j;
                }else if(Map[i][j]=='M'){
                    x=i;
                    y=j;
                }
            }
        }
        while(count<100 && (X!=x || Y!=y)){
            if(m==0&&x-1>=0&&Map[x-1][y]!='*'){
                x--;
            }else if(m==1&&y+1<10&&Map[x][y+1]!='*'){
                y++;
            }else if(m==2&&x+1<10&&Map[x+1][y]!='*'){
                x++;
            }else if(m==3 &&y-1>=0&&Map[x][y-1]!='*'){
                y--;
            }else{
                m=(++m)%4;
            }
            if(c==0&&X-1>=0&&Map[X-1][Y]!='*'){
                X--;
            }else if(c==1&&Y+1<10&&Map[X][Y+1]!='*'){
                Y++;
            }else if(c==2&&X+1<10&&Map[X+1][Y]!='*'){
                X++;
            }else if(c==3&&Y-1>=0&&Map[X][Y-1]!='*'){
                Y--;
            }else{
                c=(++c)%4;
            }
            ++count;
        }
        printf("%d\n",(X==x&&Y==y)?count:-1);
    }
    
    return 0;
}