bfs解答迷宫问题
#include<bits/stdc++.h>
using namespace std;
int dir[4][2]={-1,0,0,-1,0,1,1,0};//方向数组规律去记忆(有对称规律)
int bfs(vector<vector<char> >& maze,vector<vector<bool> >& vis,int sx,int sy,int ex,int ey,int m,int n){
queue<pair<int,int> > q;//定义一个二元组用来存x,y坐标
q.push({sx,sy});
vis[sx][sy]=true;//vis数组表示是否已经抵达过
int step=0;//记录步数
while(!q.empty()){//bfs开始
int size=q.size();
for(int i=0;i<size;i++){
pair<int,int> cur=q.front();
int curx=cur.first;
int cury=cur.second;
q.pop();
if(curx==ex&&cury==ey){
return step;//坐标相等到达终点
}
else{
for(int j=0;j<4;j++){
int nx=curx+dir[j][0];
int ny=cury+dir[j][1];
if(nx>=0&&nx<m&&ny>=0&&ny<n&&!vis[nx][ny]&&maze[nx][ny]!='#'){
q.push({nx,ny});//如果isValid,那么将当前坐标入队
vis[nx][ny]=true;//标记已经走过
}
}
}
}
step++;//加一步
}
return -1;//无法抵达返回-1
}
int main() {
int sx,sy,ex,ey,m,n;
cin>>m>>n>>sx>>sy>>ex>>ey;
vector<vector<char> >maze(m,vector<char>(n));//m*n的二维数组
vector<vector<bool> >vis(m,vector<bool>(n,false));//都初始化为false
for(int i=0;i<maze.size();i++){
for(int j=0;j<maze[i].size();j++){
cin>>maze[i][j];//构建迷宫
}
}
int step=bfs(maze,vis,sx,sy,ex,ey,m,n);
cout<<step;
return 0;
}
欢迎批评指正!