源码:
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
const int maxn = 403;
const int dx[] = {-1, -2, -2, -1, 1, 2, 2, 1};
const int dy[] = {2, 1, -1, -2, 2, 1, -1, -2};
int n, m, x, y;
int dis[maxn][maxn];
queue<pii> q;
int main()
{
memset(dis, -1, sizeof(dis));
scanf("%d%d%d%d", &n, &m, &x, &y);
q.push({x, y});
dis[x][y] = 0;
while (!q.empty())
{
int nx = q.front().first;
int ny = q.front().second;
q.pop();
for (int i = 0; i < 8; i++)
{
int ux = nx + dx[i];
int uy = ny + dy[i];
if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && dis[ux][uy] == -1)
{
dis[ux][uy] = dis[nx][ny] + 1;
q.push({ux, uy});
}
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
printf("%5d", dis[i][j]);
printf("\n");
}
return 0;
}
必关