再 次 绝 望
查看原帖
再 次 绝 望
315704
望庐山瀑布楼主2021/1/28 15:40
#include <iostream>

using namespace std;

char map[12][12];

struct mod {
    // 以下三个变量分别表示:物体在map[y][x]处, 物体的朝向(默认为北)
    int x;
    int y;
    char face = 'n';//'n', 's', 'e', 'w'
};

void move(mod m) {
    switch (m.face) {
        case 'n':
            if (map[m.y - 1][m.x] == '*') {
                m.face = 'e';
            } else {
                m.y++;
            }
            break;
        case 's':
            if (map[m.y + 1][m.x] == '*') {
                m.face = 'w';
            } else {
                m.y--;
            }
            break;
        case 'e':
            if (map[m.y][m.x + 1] == '*') {
                m.face = 's';
            } else {
                m.x++;
            }
            break;
        case 'w':
            if (map[m.y][m.x - 1] == '*') {
                m.face = 'n';
            } else {
                m.x--;
            }
            break;
    }
}

// 牛 和 约翰
mod niu, john;

int main() {
    // 将地图一圈设为障碍物方便计算
    for (int i = 0; i < 12; i++) {
        map[i][0] = '*';
        map[i][11] = '*';
        map[0][i] = '*';
        map[11][i] = '*';
    }
    // 输入
    for (int i = 1; i <= 10; i++) {
        for (int j = 1; j <= 10; j++) {
            cin >> map[i][j];
            if (map[i][j] == 'C') {
                niu.x = j;
                niu.y = i;
            } else if (map[i][j] == 'F') {
                john.x = j;
                john.y = i;
            }
        }
    }
    // 记录次数
    int time = 0;
    //寻找 算法
    while (niu.x != john.x && niu.y != john.y) {
        move(niu);
        move(john);
        time++;
        if (time > 160000) {
            cout << "找不到" << 0;
            return 0;
        }
    }
    cout << time;
    return 0;
}

样例的结果是0... 循环次数直接大于160000 还挺快的hhh

2021/1/28 15:40
加载中...