news 2026/9/10 4:29:50

算法日常・每日刷题--<多源BFS>4

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法日常・每日刷题--<多源BFS>4

1162. 地图分析 - 力扣(LeetCode)1162. 地图分析 - 你现在手里有一份大小为 n x n 的 网格 grid,上面的每个 单元格 都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地。请你找出一个海洋单元格,这个海洋单元格到离它最近的陆地单元格的距离是最大的,并返回该距离。如果网格上只有陆地或者海洋,请返回 -1。我们这里说的距离是「曼哈顿距离」( Manhattan Distance):(x0, y0) 和 (x1, y1) 这两个单元格之间的距离是 |x0 - x1| + |y0 - y1| 。 示例 1:[https://assets.leetcode.cn/aliyun-lc-upload/uploads/2019/08/17/1336_ex1.jpeg]输入:grid = [[1,0,1],[0,0,0],[1,0,1]]输出:2解释: 海洋单元格 (1, 1) 和所有陆地单元格之间的距离都达到最大,最大距离为 2。示例 2:[https://assets.leetcode.cn/aliyun-lc-upload/uploads/2019/08/17/1336_ex2.jpeg]输入:grid = [[1,0,0],[0,0,0],[0,0,0]]输出:4解释: 海洋单元格 (2, 2) 和所有陆地单元格之间的距离都达到最大,最大距离为 4。 提示: * n == grid.length * n == grid[i].length * 1 <= n <= 100 * grid[i][j] 不是 0 就是 1https://leetcode.cn/problems/as-far-from-land-as-possible/description/

一、题目描述

给定一个n * n的网格地图grid,里面:

  • 1代表陆地

  • 0代表海洋

我们需要找到距离陆地最远的海洋格子的距离

距离定义:该海洋格子到最近一块陆地的曼哈顿距离

特殊情况:

  • 全陆地 / 全海洋 → 输出-1

最优思路:多源 BFS(核心)

多源 BFS 本质:所有起点同时扩散,一层一层向外“淹”

本题所有陆地都是源点

  1. 先把所有陆地一次性入队,距离初始化为 0

  2. 队列统一向外四层扩散

  3. 第一次访问到海洋的距离,就是该海洋到最近陆地的最短距离

  1. 初始化距离数组ret,全部置-1(未访问)

  2. 遍历网格,将所有陆地入队,距离置 0

  3. 开始 BFS 四层扩散:只访问未访问的海洋

  4. 遍历距离数组,找出最大距离

  5. 特判:最大距离为 0(全陆地)返回 -1,否则返回最大距离

class Solution { public: int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; int maxDistance(vector<vector<int>>& grid) { int m=grid.size(); int n=grid[0].size(); vector<vector<int>> ret(m,vector<int> (n,-1)); queue<pair<int ,int>>q; for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { if(grid[i][j]==1) { q.push({i,j}); ret[i][j]=0; } } } while(q.size()) { auto [a,b]=q.front();q.pop(); for(int i=0;i<4;i++) { int x=a+dx[i]; int y=b+dy[i]; if(x>=0&&x<m&&y>=0&&y<n&&grid[x][y]==0&&ret[x][y]==-1) { ret[x][y]=ret[a][b]+1; q.push({x,y}); } } } int ans=-2; for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { ans=ret[i][j]>ans?ret[i][j]:ans; } } return ans == 0 ? -1 : ans; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 20:45:38

蓝桥杯国赛C++题解:动态规划、图论与数论算法实战剖析

1. 项目概述&#xff1a;一场算法竞赛的深度复盘又到了蓝桥杯国赛季&#xff0c;看着网上各种“求题解”、“等更新”的帖子&#xff0c;我想是时候把自己去年参赛和后续研究的心得整理出来了。这份“第十三届蓝桥杯C B组国赛题解”不是什么官方答案&#xff0c;而是一个从赛场…

作者头像 李华
网站建设 2026/9/2 12:41:47

C++ vector深度解析:从内存模型到实战避坑指南

1. 项目概述&#xff1a;为什么vector是C开发者的“瑞士军刀”&#xff1f; 如果你写过C&#xff0c;几乎不可能没用过 vector 。它可能是你从C语言数组转向C标准库时&#xff0c;接触的第一个容器&#xff0c;也是日常开发中使用频率最高的一个。但很多人对它的理解&#xf…

作者头像 李华
网站建设 2026/9/2 16:31:41

国产内存进入PC供应链:内存系统原理与开发者排查实践

从“三大PC厂商用上国产内存”谈起&#xff1a;PC内存供应链转变与开发者视角的真相如果你最近关注PC硬件新闻&#xff0c;应该会留意到一个标题&#xff1a;三大PC厂商开始使用国产内存。表面上这只是一条供应链消息&#xff0c;但结合PC行业几十年来的内存采购格局&#xff0…

作者头像 李华
网站建设 2026/9/2 22:03:12

桥梁缆索吊索缺陷检测数据集:YOLO目标检测实战方案

简介&#xff1a;在计算机视觉领域&#xff0c;目标检测一直是工业视觉落地的核心方向&#xff0c;YOLO系列模型凭借其高效性与易用性&#xff0c;成为缺陷检测任务的首选工具。桥梁缆索、吊索作为基础设施的“生命线”&#xff0c;长期承受交变荷载与环境侵蚀&#xff0c;表面…

作者头像 李华
网站建设 2026/9/2 19:23:17

8款口碑AI写作辅助软件横向实测,本硕博避坑全流程指南

前言&#xff1a;AI 写论文乱象频发&#xff0c;实测 8 款工具理清适配边界 每到毕业季&#xff0c;本科生、硕博生都会集中寻找 AI 论文辅助工具&#xff0c;市面各类写作软件层出不穷。但普遍存在几类硬伤&#xff1a;虚假参考文献、无法匹配本校格式、不支持公式代码生成、A…

作者头像 李华
网站建设 2026/9/2 6:12:25

基于SpringBoot的农业助农系统的设计与实现(源码+lw+部署文档+讲解等)

联系博主 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 …

作者头像 李华