求助orz 自己下载数据试过了 第一个点后三列一直输出0 求改
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,s[2500][2500],vis[250000],ans[2500][2500],root,sum;
queue<int>v1;queue<int>v2;
int d[8][2]={{2,-1},{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2}};
void bfs(int a,int b){
v1.push(a);v2.push(b);ans[a][b]=0;vis[s[a][b]]=1;
while(!v1.empty()){
for(int i=0;i<8;i++){
int na,nb;
na=v1.front()+d[i][0];nb=v2.front()+d[i][1];
if(!vis[s[na][nb]] && na>=1 && na<=n && nb>=1 && nb<=n){
v1.push(na);v2.push(nb);vis[s[na][nb]]=1;
ans[na][nb]=ans[v1.front()][v2.front()]+1;
}
}
v1.pop(),v2.pop();
}
}
int main(){
cin>>n>>m>>x>>y;int cnt=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
s[i][j]=cnt;cnt++;
}
}
bfs(x,y);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%-5d", ans[i][j]);
}
cout<<endl;
}
return 0;
}