首页 > 其他 > 详细

1252:走迷宫

时间:2020-10-05 22:13:17      阅读:60      评论:0      收藏:0      [点我收藏+]
#include<bits/stdc++.h>
using namespace std;
struct node{//新增step以记录所走步数 
    int x,y,step;
}que[2510];
char mp[50][50];//地图 
int f,r;//队首,队尾 
int n,m;//行列 
int fx[4][2]={{0,-1},{0,1},{1,0},{-1,0}};//方向 
void bfs(int x,int y){
    f=r=1;//初始化队列 
    que[r].x=x , que[r].y=y , mp[x][y]=# , que[r].step=1;//插入,并将脚下设为已走,注意,这里的最短步数是要算上第一步的 

    while(f<=r){
        node t;
        t.x=que[f].x , t.y=que[f].y , t.step=que[f].step;//记录队首 
        if(t.x==n-1 && t.y==m-1){//判断是否走到右下角 
            cout<<t.step<<endl;//输出步数 
            break;
        }
        for(int i=0;i<4;i++){
            int nx=t.x+fx[i][0];//下一步的横坐标 
            int ny=t.y+fx[i][1];//下一步的纵坐标 
        
            if(nx>=0 && nx<n && ny>=0 && ny<m && mp[nx][ny]==.){//约束条件 
                mp[nx][ny]=#;//将当前位置改成已走过 
                r++;//准备入队 
                que[r].x=nx;
                que[r].y=ny;
                que[r].step=t.step+1;//每遍历一次步数+1 
            }
        }
        f++;//队首出队 
    }
}
int main(){
    //输入 
    cin>>n>>m;
    for(int i=0;i<n;i++) cin>>mp[i];
    //从左上角开始,即从(0,0)开始遍历 
    bfs(0,0);
    return 0;
} 

 

1252:走迷宫

原文:https://www.cnblogs.com/qwn34/p/13771440.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!