错误代码(90pts)
#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
queue<int> x_,y_,z_;
bool vis[405][405];
int n,m,x,y,a[405][405],p[9][2]={{0,0},{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}};
void bfs(int X,int Y,int ans){
// cout<<X<<' '<<Y<<' '<<ans<<endl;
x_.pop();y_.pop();z_.pop();
for(int i=1;i<=8;i++){
// cout<<X+p[i][0]<<' '<<Y+p[i][1]<<endl;
if(X+p[i][0]<=n && X+p[i][0]>=1 && Y+p[i][1]<=m && Y+p[i][1]>=1 && !vis[X+p[i][0]][Y+p[i][1]]){
x_.push(X+p[i][0]),y_.push(Y+p[i][1]),z_.push(ans+1);
vis[x_.back()][y_.back()]=1;
a[x_.back()][y_.back()]=ans+1;
}
}
if(x_.empty()) return ;
// ll xx=x_.front(),yy=y_.front();
bfs(x_.front(),y_.front(),z_.front());
}
int main(){
scanf("%d %d %d %d",&n,&m,&x,&y);
x_.push(x),y_.push(y),z_.push(0);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=-1;
vis[x][y]=1;
a[x][y]=0;
bfs(x,y,0);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%-15d ",a[i][j]);
}
printf("\n");
}
return 0;
}
正解(AC)
#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
queue<int> x_,y_,z_;
bool vis[405][405];
int n,m,x,y,a[405][405],p[9][2]={{0,0},{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}};
void bfs(int X,int Y,int ans){
// cout<<X<<' '<<Y<<' '<<ans<<endl;
x_.pop();y_.pop();z_.pop();
for(int i=1;i<=8;i++){
// cout<<X+p[i][0]<<' '<<Y+p[i][1]<<endl;
if(X+p[i][0]<=n && X+p[i][0]>=1 && Y+p[i][1]<=m && Y+p[i][1]>=1 && !vis[X+p[i][0]][Y+p[i][1]]){
x_.push(X+p[i][0]),y_.push(Y+p[i][1]),z_.push(ans+1);
vis[x_.back()][y_.back()]=1;
a[x_.back()][y_.back()]=ans+1;
}
}
if(x_.empty()) return ;
// ll xx=x_.front(),yy=y_.front();
bfs(x_.front(),y_.front(),z_.front());
}
int main(){
scanf("%d %d %d %d",&n,&m,&x,&y);
x_.push(x),y_.push(y),z_.push(0);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
a[i][j]=-1;
vis[x][y]=1;
a[x][y]=0;
bfs(x,y,0);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%-15d ",a[i][j]);
}
printf("\n");
}
return 0;
}
看来除了#10外n都等于m