【BFS】走迷宫

本文详细介绍了使用宽度优先搜索(BFS)解决特殊最短路径问题的方法。通过C++代码实现,从起点出发,遍历二维矩阵地图,找到一条权值为1的最短路径。代码中利用队列进行广度优先遍历,并用二维数组记录每个点到起点的距离。最终返回最短距离。示例代码展示了如何应用BFS解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分析:

宽搜,权值为1,特殊的最短路

1、基本思路

 2、代码

#include <iostream>
#include <algorithm>
#include <cstring>//memset
#include <queue>
using namespace std;

const int N = 110;
//1、定义,g[][]存储地图,d[][]存储每个点到起点的距离
int g[N][N] , d[N][N];
//2、定义一个pair队列
typedef pair<int,int> PII;
queue<PII> q;

int n , m;

//3、宽搜
int bfs()
{
    //1.pair结构队列里面装的就是能够扩展的每个点的坐标
    
    q.push({0,0});  //宽搜的起点放入队列
   
    memset( d , -1 , sizeof d );//初始化距离为-1,表示这个点还没走过
    d[0][0] = 0 ;//初始起点距离为0
    
    //2.while循环,队列不空,取队头
    int dx[4] = {-1 , 1 , 0, 0} , dy[4] = {0 , 0, -1 ,1};//向量表示向上,下,左,右
    while( q.size() )
    {
        auto t = q.front();
        q.pop();
        //3.枚举一下四个位置
        for( int i = 0 ; i<4 ; i++ )
        {
            int x = t.first + dx[i] , y = t.second + dy[i];
            //4.没出边界并且这个点是空地并且还没有走过的话,才能扩展这个点
            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;
                q.push({x , y});//将能够扩展的点都插入队列中,
            }
        }
    }
    //4.第一次搜到终点的就是最短距离
    return d[n-1][m-1];//下标0开始存储,下标[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;
    return 0;
}

 3、模拟过程

 太容易遗忘啦hh

我将永远不会忘记这一切!即使有一天我要远走他乡,但愿我还能在梦中再回到这里来......

                                        ---《平凡的世界》第三十五章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值