感觉思路好像没错,但是死循环,求助!!!
查看原帖
感觉思路好像没错,但是死循环,求助!!!
817450
Calarence4楼主2023/11/7 21:19

求助orz

思路是获取两个的初始坐标,然后用方位表控制位置

#include <bits/stdc++.h>
using namespace std;
int dx[5] = {0, 0, +1, 0, -1}, dy[5] = {0, +1, 0, -1, 0};  // 上右下左
int d = 1;                                                 // 初始方向向上
int xc, yc, xf, yf, t;
char map0[11][11];
int main() {
    for (int i = 1; i <= 10; i++) {
        for (int j = 1; j <= 10; j++) {
            cin >> map0[i][j];
            if (map0[i][j] == 'C') {
                xc = i;
                yc = j;
            }
            if (map0[i][j] == 'F') {
                xf = i;
                yf = j;
            }
        }
    }
    while (1) {
        if (d > 4) {
            d = 1;
        }
        int nxc = xc + dx[d];  // 下一格
        int nyc = yc + dy[d];  // 下一格
        int nxf = xf + dx[d];  // 下一格
        int nyf = yf + dy[d];  // 下一格
        bool flagc = map0[nxc][nyc] == '*' || nxc > 10 || nxc < 1 || nyc > 10 ||
                     nyc < 1;  // 牛没路走
        bool flagf = map0[nxf][nyf] == '*' || nxf > 10 || nxf < 1 || nyf > 10 ||
                     nyf < 1;  // 人没路走
        if (flagc || flagf) {  // 说明二者至少一个没路走了
            d++;
        } else {
            xc = nxc;
            yc = nyc;
            xf = nxf;
            yf = nyf;
        }
        t++;
        if (xc == xf && yc == yf) {
            break;
        }
    }
    printf("%d", t);
    return 0;
}
2023/11/7 21:19
加载中...