第五个测试点出错,求大佬看看
查看原帖
第五个测试点出错,求大佬看看
938142
guanpengchn楼主2023/2/19 13:47
#include<iostream>
#include<cstring>
#include<set>

using namespace std;
const int GRID_NUM = 10;

int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
int north = 0;
int east = 1;
int south = 2;
int west = 3;

int getNextDirection(int prev) {
    if (prev == north) {
        return east;
    } else if (prev == east) {
        return south;
    } else if (prev == south) {
        return west;
    } else {
        return north;
    }
}

int main() {
    char forest[GRID_NUM][GRID_NUM];

    set<int> forestCowSet[GRID_NUM][GRID_NUM];
    set<int> forestFarmerSet[GRID_NUM][GRID_NUM];

    for (int i = 0; i < GRID_NUM; i++) {
        cin >> forest[i];
    }

    // 找牛和农场主位置
    int cowX, cowY, farmerX, farmerY;
    for (int i = 0; i < GRID_NUM; i++) {
        for (int j = 0; j < GRID_NUM; j++) {
            if (forest[i][j] == 'C') {
                cowX = i;
                cowY = j;
            }
            if (forest[i][j] == 'F') {
                farmerX = i;
                farmerY = j;
            }
        }
    }

    int cowDirection = north;
    int farmerDirection = north;

    int count = 0;
    while (true) {
        if (cowX == farmerX && cowY == farmerY) {
            cout << count;
            break;
        }
        if (forestCowSet[cowX][cowY].find(cowDirection) != forestCowSet[cowX][cowY].end()
            && forestFarmerSet[farmerX][farmerY].find(farmerDirection) != forestFarmerSet[farmerX][farmerY].end()) {
            cout << 0;
            break;
        }
        forestCowSet[cowX][cowY].insert(cowDirection);
        forestFarmerSet[farmerX][farmerY].insert(farmerDirection);

        int newCowX = cowX + dx[cowDirection];
        int newCowY = cowY + dy[cowDirection];
        if (forest[newCowX][newCowY] == '*'
            || newCowY >= GRID_NUM
            || newCowY < 0
            || newCowX >= GRID_NUM
            || newCowX < 0) {
            cowDirection = getNextDirection(cowDirection);
        } else {
            cowX = newCowX;
            cowY = newCowY;
        }
//        cout << "cowX: " << cowX << "cowY: " << cowY << "cowDirection: " << cowDirection << endl;

        int newFarmerX = farmerX + dx[farmerDirection];
        int newFarmerY = farmerY + dy[farmerDirection];
        if (forest[newFarmerX][newFarmerY] == '*'
            || newFarmerY >= GRID_NUM
            || newFarmerY < 0
            || newFarmerX >= GRID_NUM
            || newFarmerX < 0) {
            farmerDirection = getNextDirection(farmerDirection);
        } else {
            farmerX = newFarmerX;
            farmerY = newFarmerY;
        }
//        cout << "farmerX: " << farmerX << "farmerY: " << farmerY << "farmerDirection: " << farmerDirection << endl;

        count++;
    }
    return 0;
}

2023/2/19 13:47
加载中...