马的遍历
2026-07-28 17:16:48
发布于:四川
13阅读
0回复
0点赞
首先准备两个数组,提前标记好几种移动方式x和y的变化
然后准备数组和pair队列广搜
最后在主函数里调用bfs即可
#include <bits/stdc++.h>
using namespace std;
int n,m,x,y;
int dx[]={1,1,-1,-1,2,2,-2,-2};
int dy[]={2,-2,2,-2,1,-1,1,-1};
int vis[1010][1010];
void bfs(int x,int y){
queue<pair<int,int> >q;
vis[x][y]=1;
q.push({x,y});
while(q.size()>0){
pair<int,int> u=q.front();
q.pop();
for(int i=0;i<8;i++){
int tx=u.first+dx[i];
int ty=u.second+dy[i];
if(tx<=n&&tx>=1&&ty<=m&&ty>=1&&vis[tx][ty]==0){
vis[tx][ty]=vis[u.first][u.second]+1;
q.push({tx,ty});
}
}
}
}
int main(){
cin>>n>>m>>x>>y;
bfs(x,y);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<vis[i][j]-1<<" ";
}
cout<<endl;
}
return 0;
}
全部评论 2
注意
queue<pair<int,int> >中间有一个空格,虽然不会报错,但会识别成位移
2026-07-28 来自 四川
1其实不是很难,只是看着吓人
2026-07-28 来自 四川
1







有帮助,赞一个