力扣第1091题:二进制矩阵中的最短路径(BFS)

本文探讨了在二维矩阵运算中,何时选择使用BFS(广度优先搜索)和DFS(深度优先搜索)的问题。当需要查找单个结果时,DFS可能更合适,因为它会首先尝试一种路径直至找到答案。然而,当寻找最短或最长路径时,BFS更优,因为它能确保找到的第一个结果即为最优。通过举例和代码实现,阐述了BFS在寻找最短路径时的优势。

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

一、题目内容

        

 二、题目分析

        在二维矩阵运算中,什么时候使用BFS,什么时候使用DFS呢?当我们需要查找一个结果是否存在的时候,可以使用DFS,因为它是先执行一种情况直到输出结果,如果不符合再继续寻找其他的,这样的话,当找到一个结果的时候就可以直接返回了。但是当我们的需求是找到最长或者最短的结果,那么最优的解法还是使用BFS,因为正如我上面说的,如果要用DFS,它会将每种情况都执行到出结果,那么为了找到符合条件的最短或最长结果,需求遍历所有结果,然后输出需要的那个。而BFS的优势在于,它在一开始就是遍历所有结果,一层层往下进行,只要找到一种结果,那么就是最优结果,直接输出即可。

        代码:

if(grid[0][0]==1)
            return -1;
        int n = grid.length;
        if(n==1)
            return 1;
        Queue<int []>queue=new LinkedList<>();
        int [][] arr ={{1,0},{0,1},{1,1},{1,-1},{0,-1},{-1,0},{-1,-1},{-1,1}};
        //int [][] arr ={{1,0},{0,-1},{1,-1}};
        grid[0][0]=1;
        queue.add(new int []{0,0});
        int path=1;
        while(!queue.isEmpty()){
            int size=queue.size();
            for(int k=0;k<size;k++){
            int []tmp=queue.poll();
            int tmpi=tmp[0];
            int tmpj=tmp[1];
                if(tmpi==n-1&&tmpj==n-1)
                    return path;
                for(int []cur: arr){
                    int curi=cur[0]+tmpi;
                    int curj=cur[1]+tmpj;
                    if(curi>=0&&curi<n&&curj>=0&&curj<n&&grid[curi][curj]==0){
                        grid[curi][curj]=1;
                        queue.add(new int []{curi,curj});
                    }
                }
            }
            
            path++;

        }

        return -1;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少๑渊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值