AC代码
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iomanip>
#include<queue>
using namespace std;
typedef long long ll;
const int N = 1e6+13;
int n,m,x,y,mp[413][413];
int d1[]= {1,1,-1,-1,-2,-2,2,2};
int d2[]= {-2,2,-2,2,-1,1,-1,1};
struct node{
int x;
int y;
};
queue<node> q;
// bfs标配 ---> 队列 + 结构体
void bfs(int x,int y)
{
node head,one;
head.x = x;
head.y = y;
q.push(head);
while(!q.empty()) // 为空为1
{
head = q.front();
q.pop();
for(int i=0;i<=7;++i)
{
one.x = head.x+d1[i];
one.y = head.y+d2[i];
if(one.x<1 || one.x>n || one.y<1 || one.y>m || mp[one.x][one.y]!=-1 ) continue;
q.push(one);
mp[one.x][one.y] = mp[head.x][head.y]+1;
}
}
}
int main()
{
memset(mp,-1,sizeof(mp));
cin>>n>>m>>x>>y;
mp[x][y] = 0;
bfs(x,y);
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
printf("%-5d",mp[i][j]); // -5d 表示 左对齐 , 5d表示右对齐
}
cout<<endl;
}
return 0;
}