bfs走迷宫

 

 #include<iostream>

#include<cstring>

#include<queue>

const int N=110;

int n,m;

typedef pair<int,int> PII;

int g[N][N];//存图

int d[N][N];//记录距离

PII q[N*N];//队列存放走的路线

 

int bfs(){

 

queue <PII> q;

q[0]={0,0};//起始位置

memset(d,-1,sizeof d);//初始化d为-1

d[0][0]=0;//源点到起点的位置

 

int dx[4]={-1,0,1,0};

int dy[4]={0,1,0,-1};

while(!q.empty()){

auto t=q.front();

q.pop();

for(int i=0;i<4;i++){//记录分别从四个方向走

int x=t.first+dx[i];

int y=t.second+dy[i];

if(x>=0&&x<n&&y>=0&&y<m&&g[x][y]=0&&d[x][y]==-1){

d[x][y]=d[t.first][t.second]+1;//距离+1,消除没走过的状态

q[++t]={x,y};//把点加进队列

}

}

}

return d[n-1][m-1];

}

int main(){

cin>>n>>m;

for(int i=0;i<n;i++)

for(int j=0;j<m;j++)

cin>>g[i][j];//先输入地图

 

cout<<bfs()<<endl;

}

 

posted @ 2023-03-16 21:24  chenxinyue  阅读(30)  评论(0)    收藏  举报