代码如下,只过了两个测试点,哪位大佬能解答一下emmm
#include <bits/stdc++.h>
using namespace std;
//pair表示状态
const int INF = -1;
typedef pair<int,int> P;
#define MAX_N 401
#define MAX_M 401
//输入
int N,M;
int sx,sy;//起点
int d[MAX_N][MAX_M];//最短距离
bool flag[MAX_N][MAX_M];
int dx[8] = {-1,-2,-2,-1,1,2,2,1};
int dy[8] = {2,1,-1,-2,2,1,-1,-2};
void bfs(){
queue<P>que;
que.push(P(sx,sy));
d[sx][sy] = 0;
flag[sx][sy] = true;
while(que.size()){
P p = que.front();
que.pop();
for(int i=1;i<=8;i++){
int nx = p.first+dx[i];
int ny = p.second + dy[i];
if(nx>0 && nx <=N && ny>0 && ny<=M && !flag[nx][ny]){
que.push(P(nx,ny));
d[nx][ny] = d[p.first][p.second]+1;
flag[nx][ny] = true;
}
}
}
}
void solve(){
bfs();
for(int i=1;i<=N;i++){
for(int j=1;j<=M;j++){
printf("%-5d",d[i][j]);
}
cout << endl;
}
}
int main(){
cin >> N >> M;
memset(d,-1,sizeof(d));
memset(flag,false,sizeof(flag));
cin >> sx >> sy;
solve();
}