0分错误,自己验证的每毛病呀?
查看原帖
0分错误,自己验证的每毛病呀?
339244
yu18845098428楼主2020/9/21 20:25
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
int map[405][405];
int n,m, sx, sy;
struct node {
    int x, y;
    int step;
};

int dir[8][2] = { // 8个方向
    {-2,1}, {-2, -1}, {2, -1}, {2, 1},
    {-1, -2}, {-1, 2}, {1, -2}, {1, 2}
};
queue<node> que;

int main() {
    cin >> n >> m;
    cin >> sx >> sy;
    que.push({sx, sy, 1});
    memset(map, 0xff, sizeof(map)); // 全部置为-1标记
    map[sx][sy] = 0;
    while(!que.empty()) {
        node temp = que.front();
        que.pop();
        for (int i = 0; i < 8; i++) {
            int x = temp.x + dir[i][0];
            int y = temp.y + dir[i][1];
            if (x < 1 || y < 1 || x > n || y > m) continue;
            if (map[x][y] == -1 && map[x][y] != 0) {//不越界且没有走过的情况+不是起点
                map[x][y] = temp.step; // 存取步数
                que.push({x, y, temp.step + 1});
            }
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            if (j != 1) cout << " ";
            printf("%-5d",map[i][j]);
            
        }
        cout << endl;
    }
    return 0;
}
2020/9/21 20:25
加载中...