题解
2025-11-09 10:20:58
发布于:广东
1阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
struct Node{
int x,y;
};
int a[10][10];
int dis[10][10]; //存储从起点到达每个点的最短路径长度
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
//方向数组
bool vis[10][10];
queue<Node> q;
bool check(int o,int p){
if(o>=1&&o<=5&&p>=1&&p<=5&&vis[o][p]==0&&a[o][p]==0){ //边界判断 & 是否访问过 & 是否是空地
return true;
}
return false;
} //判断坐标是否合法
int main(){
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
dis[i][j]=-1;
}
} //初始化,最后输出的时候如果没有解可以直接输出 -1,较为方便
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
cin>>a[i][j];
}
}
vis[1][1]=1; //已访问
dis[1][1]=0; //起点到起点的最短路径长度是 0
q.push({1,1}); //放入起点(根节点)
//初始化起点
while(!q.empty()){ //如果队列非空,循环
Node now=q.front(); //获取当前队头节点
q.pop();
int x1=now.x,y1=now.y; //队头节点坐标
for(int i=0;i<4;i++){ //枚举四个方向
int nx=x1+dx[i],ny=y1+dy[i]; //获取当前坐标
if(check(nx,ny)){ //如果当前坐标合法
vis[nx][ny]=1;
dis[nx][ny]=dis[x1][y1]+1; //当前的点的路径长度是队头元素(上一个点)的路径长度 +1
q.push({nx,ny});
}
}
}
cout<<dis[5][5]; //直接输出终点最短路径长度
return 0;
}
这里空空如也

有帮助,赞一个