注意左对齐,宽五格的输出,为此wa了两次
#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
const int N = 405;
int vis[N][N], res[N][N];
struct point
{
int x;
int y;
int step;
};
int dx[] = {1, 2, 2, 1, -1, -2, -2, -1};
int dy[] = {2, 1, -1, -2, -2, -1, 1, 2};
int main()
{
point start;
queue <point> r;
int n, m, p, q;
cin >> n >> m >> start.x >> start.y;
start.step = 0;
r.push(start);
vis[start.x][start.y] = 1;
res[start.x][start.y] = 0;
while (!r.empty())
{
for (int k = 0; k <= 7; k++)
{
int tx = r.front().x + dx[k];
int ty = r.front().y + dy[k];
if (tx>=1 && tx<=n && ty>=1 && ty<=m && vis[tx][ty]==0)
{
point tmp;
tmp.x = tx;
tmp.y = ty;
tmp.step = r.front().step + 1;
res[tx][ty] = r.front().step + 1;
r.push(tmp);
vis[tx][ty] = 1;
}
}
r.pop();
}
int xx = -1;
for (int i = 1; i <= n; i++){
for (int j = 1; j<= m; j++){
if(vis[i][j]==0) printf("%-5d",xx);
else printf("%-5d",res[i][j]);
}
printf("\n");
}
return 0;
}