当前位置: 首页 > news >正文

【每日一题Day218】LC1091 二进制矩阵中的最短路径 | BFS

二进制矩阵中的最短路径【LC1091】

你驾驶出租车行驶在一条有 n 个地点的路上。这 n 个地点从近到远编号为 1n ,你想要从 1 开到 n ,通过接乘客订单盈利。你只能沿着编号递增的方向前进,不能改变方向。

乘客信息用一个下标从 0 开始的二维数组 rides 表示,其中 rides[i] = [starti, endi, tipi] 表示第 i 位乘客需要从地点 starti 前往 endi ,愿意支付 tipi 元的小费。

每一位 你选择接单的乘客 i ,你可以 盈利 endi - starti + tipi 元。你同时 最多 只能接一个订单。

给你 nrides ,请你返回在最优接单方案下,你能盈利 最多 多少元。

**注意:**你可以在一个地点放下一位乘客,并在同一个地点接上另一位乘客。

  • 思路

    常规BFS,使用队列进行BFS,搜索时记录搜索的轮数。搜索到一个可以访问的节点时,将其入队。如果搜索到终点时,直接返回当前轮数;如果队列为空仍为访问到终点,那么返回-1;

    • 访问过一个节点后,为了避免重复访问直接将给节点设置为-1
  • 实现

    class Solution {
        public int shortestPathBinaryMatrix(int[][] grid) {
            // BFS
           int[][] dirs = {{0, 1}, {1, 0}, {1, 1}, {0, -1}, {-1, 0}, {-1, -1}, {1, -1}, {-1, 1}};// 8个方向?
           Deque<int[]> queue = new LinkedList<>();
           int n = grid.length;
           int count = 0;
           if (grid[0][0] == 0){
               queue.add(new int[]{0, 0});
           }
           while(!queue.isEmpty()){
               int size = queue.size();
               count++;
               for (int i = 0; i < size; i++){
                    int[] p = queue.poll();
                    int x = p[0], y = p[1];
                    if (x == n - 1 && y == n - 1) return count;
                    for (int[] dir : dirs){
                        int x1 = x + dir[0], y1 = y + dir[1];           
                        if (x1 >= 0 && y1 >= 0 && x1 <n && y1 < n && grid[x1][y1] != 1){                 
                            queue.add(new int[]{x1, y1});
                            grid[x1][y1] = 1;
                        }
                    }
               }
               
           }
           return -1;
    
        }
    }
    
    • 复杂度
      • 时间复杂度: O ( n 2 ) \mathcal{O}(n^2) O(n2)
      • 空间复杂度: O ( n 2 ) \mathcal{O}(n^2) O(n2)

相关文章:

  • 【每日一题Day218】LC1091 二进制矩阵中的最短路径 | BFS
  • 统计软件与数据分析Lesson15----梯度下降(Gradient Descent)过程可视化
  • C语言中的数学库math.h介绍
  • 头羊部落亮相第26届北京餐食会
  • java 注解学习
  • 基于LLMs的多模态大模型(Flamingo, BLIP-2,KOSMOS-1,ScienceQA)
  • 数字信号处理(8)IIR滤波器及实现
  • 【1091. 二进制矩阵中的最短路径】
  • Android Jetpack Compose之列表的使用
  • 如何在 Windows 10 中刷新 DNS 解析缓存
  • TI EDI 项目数据库方案开源介绍
  • openGauss Developer Day 2023 | 邀您参加海量数据分论坛
  • 上线11年公众号广告大变天!最新政策解读|西瓜数据
  • chatgpt赋能python:Python二次方的表示方法及其应用
  • Java程序设计入门教程--标识符和关键字
  • 经典文献阅读之--ERASOR(栅格占用过滤动态障碍物)
  • 2023年B题人工智能对大学生学习影响的评价
  • 2023电工杯数学建模竞赛A题思路解析+代码+论文
  • 【uniapp】踩坑日记核心重点
  • docker入门(1)----服务/镜像/容器相关命令
  • Ansys Zemax | 如何模拟部分反射和散射的表面
  • Spring:Spring框架结构 ②
  • 【SVN内网穿透】远程访问Linux SVN服务
  • 快速入门Matlab——深入学习字符串
  • 【c语言习题】使用链表解决约瑟夫问题
  • 如何在 Python 中循环字典
  • 7.条件渲染
  • 基于STM32的DHT11温湿度测量
  • Office project 2010安装教程
  • 基于Selenium+Python的web自动化测试框架