只有10分求助
查看原帖
只有10分求助
792359
Hayaizo楼主2023/1/17 13:19
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;

typedef pair<int, int>PII;
const int N = 310;
int ans[N][N];
int n, m, x, y;
const int dx[8] = { -1,-2,-2,-1,1,2,2,1 };
const int dy[8] = { 2,1,-1,-2,2,1,-1,-2 };
queue<PII>q;

void Bfs() {
	while (!q.empty()) {
		auto u = q.front();
		int ux = u.first, uy = u.second;
		q.pop();
		for (int i = 0; i < 8; i++) {
			int x = ux + dx[i], y = ux + dy[i];
			int d = ans[ux][uy];
			if (x < 1 || x > n || y < 1 || y > m || ans[x][y] != -1) {
				continue;//越界或者已经走过了该位置
			}
			ans[x][y] = d + 1;
			q.push({ x, y });
		}
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			printf("%-5d", ans[i][j]);
		}
		puts("");
	}
}

int main(void) {
	scanf("%d %d %d %d", &n, &m, &x, &y);
	memset(ans, -1, sizeof(ans)); //初始化为-1,表示没有访问
	ans[x][y] = 0; //初始位置距离为0
	q.push({x,y});
	Bfs();
	return 0;
}
2023/1/17 13:19
加载中...