详细注释代码-BFS模板
2025-09-13 17:45:37
发布于:广东
3阅读
0回复
0点赞
#include<iostream>
#include<queue>
using namespace std;
int dx[8] = {-2,-1,1,2,2,1,-1,-2};
int dy[8] = {-1,-2,-2,-1,1,2,2,1};
struct node{
int x,y,step;
}r,l;
bool vis[405][405];
int ans[405][405];
int n,m,sx,sy;
void bfs(){
//①定义队列,起点入队,标记起点
queue<node> q;
q.push({sx,sy,0});
vis[sx][sy] = 1;
//②在队列不为空的情况下,取队首、弹出
while(q.size()){
r = q.front();
q.pop();
//保存当前点【r.x,r.y】的最小步数r.step
ans[r.x][r.y] = r.step;
//③找邻居,判断是否合法,步数+1,入队
for(int i=0;i<8;i++){
l.x = r.x + dx[i];
l.y = r.y + dy[i];
if(1 <= l.x && l.x <= n && 1 <= l.y && l.y <= m && vis[l.x][l.y]==0){
l.step = r.step + 1;//下一个点可以走,步数 +1
vis[l.x][l.y] = 1;//标记
q.push(l);//合法入队,继续找
}
}
}
}
int main(){
cin>>n>>m>>sx>>sy;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
ans[i][j] = -1;//默认全部都不能走!
}
}
bfs();//使用广搜去找,能到的点,而且要是最小步数
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<ans[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
//Tian
全部评论 2
他是抄我的
2天前 来自 广东
0他是抄我的
3天前 来自 广东
0
有帮助,赞一个