感觉思路没什么问题,有大佬能指点一下吗555,感激不尽
#include<iostream>
#include<queue>
#include<iomanip>
using namespace std;
int n,m,x,y;
int mp[500][500]={0}; //地图
bool vis[500][500]; //判断有没有走过该点
int dirx[]={2,1,-1,-2,-2,-1,1,2}; //马走的8个方向
int diry[]={1,2,2,1,-1,-2,-2,-1};
struct AXI{
int x,y;
}ax;
queue<AXI> qu;
bool judge(int x,int y){
if(x<1||y<1||x>n||y>n){ //超出地图
return false;
}
if(vis[x][y]==true){ //已经走过该点
return false;
}
return true;
}
void BFS(int x,int y){
ax.x=x; ax.y=y;
qu.push(ax);
int step=1; //第几次搜索
while(!qu.empty()){
int len=qu.size();
while(len--){
for(int i=0;i<8;i++){
int tx=qu.front().x+dirx[i];
int ty=qu.front().y+diry[i];
if(judge(tx,ty)){ //判断有无超出边界,有无走过该点
ax.x=tx; ax.y=ty;
qu.push(ax);
mp[tx][ty]=step;
vis[tx][ty]=true;
}
}
qu.pop();
}
step++;
}
}
int main(){
cin>>n>>m>>x>>y;
vis[x][y]=true; //初始化起始点
mp[x][y]=0;
BFS(x,y);
for(int i=1;i<=n;i++){ //输出
for(int j=1;j<=n;j++){
if(vis[i][j]==false){ //马没走过的点输出-1
cout<<left<<setw(5)<<-1;
}else{
cout<<left<<setw(5)<<mp[i][j];
}
}
cout<<endl;
}
return 0;
}