不清楚哪里错了 30分求调 应该就对了输出是0的
查看原帖
不清楚哪里错了 30分求调 应该就对了输出是0的
1785377
_plp1pigocc楼主2025/7/21 22:55
#include<iostream>
#include<algorithm>
char a[12][12];
int main() {
    int fx=0;
    int fy=0;
    int cx=0;
    int cy=0;
    for (int i = 1;i <= 10;i++) {
        for (int j = 1;j <= 10;j++) {
            std::cin >> a[i][j];
            if (a[i][j] == 'C'){
                cx = j;
                cy = i;
            }
            if (a[i][j]== 'F') {
                fx = j;
                fy = i;
            }
        }
    }
    int i;
    int j;
    for (i = 0,j = 0;j <= 11;j++)a[i][j] = '*';
    for (i = 11,j = 0;j <= 11;j++)a[i][j]= '*';
    for (j = 0,i = 0;i<= 11;i++)a[i][j] = '*';
    for (j = 11,i = 0;i <= 11;i++)a[i][j]= '*';
    int posxf=-1;
    int posyf =0;
    int posxc = -1;
    int posyc = 0;
    int cnt = 0;
    while(1) {
        if (fx == cx && fy == cy) {
            std::cout << cnt;
            break;
        }
        cnt++;
        if (a[fx+posxf][fy+posyf]!= '*') {
            a[fx][fy] = '.';
            fx = fx + posxf;
            fy = fy + posyf;
            a[fx][fy]= 'F';
        }
        else {
            if (posxf == -1 && posyf == 0) {
                posxf = 0;
                posyf = 1;
            }
            else if (posxf == 0 && posyf == 1) {
                posxf =1;
                posyf = 0;
            }
            else if (posxf == 1 && posyf == 0) {
                posxf = 0;
                posyf =-1;
            }
            else if (posxf == 0 && posyf == -1) {
                posxf = -1;
                posyf = 0;
            }
        }
        if (a[cx+posxc][cy+posyc] != '*') {
            a[cx][cy] = '.';
            cx = cx + posxc;
            cy = cy + posyc;
            a[cx][cy] = 'C';          
        }
        else {
            if (posxc == -1 && posyc == 0) {
                posxc = 0;
                posyc = 1;
            }
            else if (posxc == 0 && posyc == 1) {
                posxc = 1;
                posyc = 0;
            }
            else if (posxc == 1 && posyc == 0) {
                posxc = 0;
                posyc = -1;
            }
            else if (posxc == 0 && posyc == -1) {
                posxc = -1;
                posyc = 0;
            }
        }
        if (cnt >= 100000) {
            std::cout << 0;
            break;
        }
    }
    return 0;
}
2025/7/21 22:55
加载中...