AC
2025-10-08 11:18:29
发布于:浙江
1阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y;
struct node{
int xx,yy,step;
};
queue<node>q;
int a[405][405];
int dx[]={-2,-2,-1,-1,1,1,2,2};
int dy[]={-1,1,-2,2,-2,2,-1,1};
void bfs(){
while(!q.empty()){
//取队首
node t=q.front();
q.pop();
//遍历能走到的点
for(int i=0;i<8;i++){
int nx=t.xx+dx[i];
int ny=t.yy+dy[i];
//判断能不能走到
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[nx][ny]==-1){
//入队标记为已访问
q.push({nx,ny,t.step+1});
a[nx][ny]=t.step+1;
}
}
}
}
int main(){
memset(a,-1,sizeof(a));
cin>>n>>m>>x>>y;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
//起点入队,标记为已访问
q.push({x,y,0});
a[x][y]=0;
//开始广搜
bfs();
//输出
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
这里空空如也







有帮助,赞一个