广度优先搜索正经题解
2025-08-03 12:50:52
发布于:北京
5阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int n, m, x, y;
int g[500][500];
int dx[] = {2, -2, 1, -1, 2, -2, 1, -1};
int dy[] = {1, -1, 2, -2, -1, 1, -2, 2};
struct node{
int x, y;
};
int main(){
cin >> n >> m >> x >> y;
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
g[i][j]=1e9;
}
}
queue<node> q;
q.push({x, y});
g[x][y]=0;
while(q.size()){
node u = q.front();
q.pop();
for(int i=0; i<8; i++){
int nx = u.x+dx[i];
int ny = u.y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m){
if(g[nx][ny]>g[u.x][u.y]+1){
g[nx][ny]=g[u.x][u.y]+1;
q.push({nx, ny});
}
}
}
}
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
if(g[i][j]==1e9)printf("%-5d", -1);
else printf("%-5d", g[i][j]);
}
cout << endl;
}
}
这里空空如也
有帮助,赞一个