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;
}
欢迎批评指正!