原题传送门
#include <bits/stdc++.h>
using namespace std;
int movex[] = { 1,1,2,2,-1,-1,-2,-2 };
int movey[] = { -2,2,-1,1,2,-2,1,-1 };
int x_n, y_n;
int ans[405][405];
bool walk[405][405];
queue<pair<int, int> > q;
void bfs(int x, int y)
{
ans[x][y] = 0;
walk[x][y] = true;
q.push(make_pair(x, y));
while (!q.empty())
{
pair<int, int> temp = q.front();
q.pop();
for (int i = 0; i < 8; i++)
{
int xx = temp.first + movex[i];
int yy = temp.second + movey[i];
if (xx >= 1 && xx <= x_n && yy >= 1 && yy <= y_n && walk[xx][yy] == false)
{
walk[xx][yy] = true;
q.push(make_pair(xx, yy));
ans[xx][yy] = ans[temp.first][temp.second] + 1;
}
}
}
}
int main()
{
cin >> x_n >> y_n;
int xbegin, ybegin;
cin >> xbegin >> ybegin;
memset(ans, -1, sizeof(ans));
bfs(xbegin, ybegin);
for (int i = 1; i <= x_n; i++)
{
for (int j = 1; j <= y_n; j++)
{
cout << left << setw(5) << setfill(' ') << ans[i][j];
}
cout << endl;
}
}
BFS
卡输出卡了三次