rt,用的bfs,while看了该封锁的封了,其他地方没有卡循环的可能,所以求调。谢谢
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y;
bool blk;
int sum;
}start,a[400][400];
int n,m;
int p[8][2]={{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2}};
queue <node> q;
void find(node x){
a[x.x][x.y].blk=1;
q.push(x);
while(!q.empty()){
for(int i=0;i<8;i++){
if(!a[q.front().x+p[i][0]][q.front().y+p[i][1]].blk){
q.push(a[q.front().x+p[i][0]][q.front().y+p[i][1]]);
a[q.front().x+p[i][0]][q.front().y+p[i][1]].sum=a[q.front().x][q.front().y].sum+1;
a[q.front().x+p[i][0]][q.front().y+p[i][1]].blk=1;
}
}
q.pop();
}
}
int main(){
cin>>n>>m>>start.x>>start.y;
find(start);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<std::left<<setw(5)<<a[i][j].sum;
}
cout<<endl;
}
return 0;
}