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

多源最短路径

文章目录

  • 1. 01 矩阵(542)
  • 2. 飞地的数量(1020)
  • 3. 地图分析(1162)
  • 4. 地图中的最高点(1765)


1. 01 矩阵(542)

题目描述:
在这里插入图片描述
算法原理:
这题会想到能不能遍历每一个格子中的元素,然后挨个的去进行单源最短路径的操作,但是题目中指出要得到的矩阵是每个格子中的元素到最近的0的距离,那么我们完全可以从矩阵中的0出发,设置距离的矩阵,以一种类似于FloodFill算法的方法来更新记录从0走了多少步的距离矩阵,具体看代码。
代码如下:

class Solution {public int[][] updateMatrix(int[][] mat) {int[] dx = { 0, 0, 1, -1 };int[] dy = { 1, -1, 0, 0 };int m = mat.length;int n = mat[0].length;int[][] dis = new int[m][n];Queue<int[]> q = new LinkedList<>();for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (mat[i][j] == 0) {dis[i][j] = 0;q.add(new int[] { i, j });} else {dis[i][j] = -1;}}}while (!q.isEmpty()) {int[] temp = q.poll();int a = temp[0], b = temp[1];for (int i = 0; i < 4; i++) {int x = a + dx[i], y = b + dy[i];if (x >= 0 && x < m && y >= 0 && y < n && dis[x][y] == -1) {dis[x][y] = dis[a][b] + 1;q.add(new int[] { x, y });}}}return dis;}
}

题目链接

2. 飞地的数量(1020)

题目描述:
在这里插入图片描述

算法原理:
和上题思想类似,上题是从终点0出发,这题是从终点的边界1元素出发去不断的发散,直至队列为空,此时还没有被遍历到的元素1就是走不出去的。
代码如下:

class Solution {public int numEnclaves(int[][] grid) {int[] dx = { 0, 0, 1, -1 };int[] dy = { 1, -1, 0, 0 };int m = grid.length, n = grid[0].length;boolean[][] vis = new boolean[m][n];Queue<int[]> queue = new LinkedList<>();for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (i == 0 || i == m - 1 || j == 0 || j == n - 1) {if (grid[i][j] == 1) {vis[i][j] = true;queue.add(new int[] { i, j });}}}}while (!queue.isEmpty()) {int[] temp = queue.poll();int a = temp[0], b = temp[1];for (int i = 0; i < 4; i++) {int x = a + dx[i], y = b + dy[i];if (x >= 0 && x < m && y >= 0 && y < n && !vis[x][y] && grid[x][y] == 1) {vis[x][y] = true;queue.add(new int[] { x, y });}}}int ret = 0;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] == 1 && !vis[i][j]) {ret++;}}}return ret;}
}

题目链接

3. 地图分析(1162)

题目描述:
在这里插入图片描述

算法原理:
这题就是第一题的换一种问法,做法和第一题一致。
代码如下:

class Solution {public int maxDistance(int[][] grid) {int[] dx = { 1, -1, 0, 0 };int[] dy = { 0, 0, 1, -1 };int m = grid.length;int n = grid[0].length;int[][] dis = new int[m][n];Queue<int[]> q = new LinkedList<>();boolean flg1 = false;boolean flg2 = false;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {dis[i][j] = -1;}}for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] == 1) {flg1 = true;q.add(new int[] { i, j });dis[i][j] = 0;} else {flg2 = true;}}}if (!(flg1 && flg2)) {return -1;}while (!q.isEmpty()) {int[] temp = q.poll();int a = temp[0], b = temp[1];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 && dis[x][y] == -1) {dis[x][y] = dis[a][b] + 1;q.add(new int[] { x, y });}}}int ret = Integer.MIN_VALUE;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] == 0) {ret = Math.max(ret, dis[i][j]);}}}return ret;}
}

题目链接

4. 地图中的最高点(1765)

题目描述:
在这里插入图片描述
算法原理:
做法同前三题类似,但是就是需要意识到前面的做法就能够得到最高,因为我们从水域开始周围的高度完全可以赋为0但是我们用了一个小贪心就是每次高度差都是1体现在我们代码中就是类似于前面的距离+1。
代码如下:

class Solution {public int[][] highestPeak(int[][] isWater) {int[] dx = { 0, 0, 1, -1 };int[] dy = { 1, -1, 0, 0 };int m = isWater.length;int n = isWater[0].length;int[][] ret = new int[m][n];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {ret[i][j] = -1;}}Queue<int[]> q = new LinkedList<>();for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (isWater[i][j] == 1) {q.add(new int[] { i, j });ret[i][j] = 0;}}}while (!q.isEmpty()) {int[] temp = q.poll();int a = temp[0], b = temp[1];for (int i = 0; i < 4; i++) {int x = a + dx[i], y = b + dy[i];if (x >= 0 && x < m && y >= 0 && y < n && ret[x][y] == -1) {ret[x][y] = ret[a][b] + 1;q.add(new int[] { x, y });}}}return ret;}
}

题目链接

相关文章:

多源最短路径

文章目录 1. 01 矩阵&#xff08;542&#xff09;2. 飞地的数量&#xff08;1020&#xff09;3. 地图分析&#xff08;1162&#xff09;4. 地图中的最高点&#xff08;1765&#xff09; 1. 01 矩阵&#xff08;542&#xff09; 题目描述&#xff1a; 算法原理&#xff1a; 这…...

在 Mac 中设置环境变量

目录 什么是环境变量&#xff0c;为什么它们重要&#xff1f;什么是环境变量&#xff1f;举个例子 如何查看环境变量如何设置和修改环境变量1. 临时设置环境变量2. 永久设置环境变量3. 修改现有环境变量 环境变量在开发中的应用在 Node.js 项目中使用环境变量在 Python 项目中使…...

记录一次ubuntu /mysql/redis/nginx等 系统安装

没想到还会做一次系统安装配置类的工作&#xff0c;没办法&#xff0c;碰到问题了&#xff0c;总得解决。 安装 &网络配置 从网上下载了ubuntu 18.04.6的安装包&#xff0c;用UltraISO做安装盘&#xff0c;到服务器上修改了下启动顺序&#xff0c;ubuntu的安装非常简单&a…...

大型语言模型 (LLM) 劫持攻击不断升级,导致每天损失超过 100,000 美元

Sysdig 威胁研究团队 (TRT) 报告称&#xff0c;LLMjacking&#xff08;大型语言模型劫持&#xff09;事件急剧增加&#xff0c;攻击者通过窃取的云凭证非法访问大型语言模型 (LLM)。 这一趋势反映了 LLM 访问黑市的不断增长&#xff0c;攻击者的动机包括个人使用和规避禁令和制…...

Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 垃圾收集器

文章目录 垃圾回收机制Stop-the-World垃圾收集器垃圾收集器分类Serial 收集器Serial Old 收集器ParNew 收集器Parallel Scavenge 收集器Parallel Old 收集器CMS 收集器CMS 收集器缺点 G1 收集器G1 收集器特点G1 收集器的分代理念G1 收集器运作过程 垃圾回收机制 垃圾回收&…...

nano 命令:文本编辑器

一、命令简介 ​nano​ 是一个简单易用的文本编辑器&#xff0c;适合初学者和那些不需要复杂功能的用户。 ​​ ‍ 相关命令&#xff08;不同难度的编辑器&#xff09;&#xff1a; 初级难度&#xff1a;nano中级难度&#xff1a;vim终极难度&#xff1a;Emacs ‍ 二、命…...

【2020工业图像异常检测文献】SPADE

Sub-Image Anomaly Detection with Deep Pyramid Correspondences 1、Background 利用深度预训练特征的最近邻&#xff08; kNN &#xff09;方法在应用于整个图像时表现出非常强的异常检测性能。kNN 方法的一个局限性是缺乏描述图像中异常位置的分割图。 为了解决这一问题&a…...

C++QT医院专家门诊预约管理系统

目录 一、项目介绍 二、项目展示 三、源码获取 一、项目介绍 医院专家门诊预约管理系统 [要求] 该系统需创建和管理以下信息&#xff1a;1、门诊专家信息&#xff1a;专家姓名、编号、性别、年龄、职称、门诊科目、服务时间、门诊预约数据集等&#xff1b;2、门诊预约信息…...

在SpringBoot项目中利用Redission实现布隆过滤器(布隆过滤器的应用场景、布隆过滤器误判的情况、与位图相关的操作)

文章目录 1. 布隆过滤器的应用场景2. 在SpringBoot项目利用Redission实现布隆过滤器3. 布隆过滤器误判的情况4. 与位图相关的操作5. 可能遇到的问题&#xff08;Redission是如何记录布隆过滤器的配置参数的&#xff09;5.1 问题产生的原因5.2 解决方案5.2.1 方案一&#xff1a;…...

【prefect】python任务调度工具 Prefect | 可视化任务工具 | Python自动化的终极武器 | 高效数据管道管理

一、产品介绍 1、官方 Github https://github.com/PrefectHQ/prefect 2、官方文档 https://docs.prefect.io/3.0/get-started/index 3、Pgsql说明 正确的python链接pgsql如下&#xff1a; import psycopg2 from sqlalchemy import create_enginedef connect_with_psycopg2(…...

蓝禾,汤臣倍健,三七互娱,得物,顺丰,快手,游卡,oppo,康冠科技,途游游戏,埃科光电25秋招内推

蓝禾&#xff0c;汤臣倍健&#xff0c;三七互娱&#xff0c;得物&#xff0c;顺丰&#xff0c;快手&#xff0c;游卡&#xff0c;oppo&#xff0c;康冠科技&#xff0c;途游游戏&#xff0c;埃科光电25秋招内推 ①蓝禾 【岗位】国内/国际电商运营&#xff0c;设计&#xff0c…...

【面向对象】设计模式分类

java中设计模式共23种&#xff0c;根据使用场景可分为创建型模式、结构型模式、行为型模式。 创建型&#xff1a; 如何创建对象。 单例模式&#xff1a;保证一个类在一个程序中只能创建一个对象。例如windows任务管理器窗口只需要创建一个。单例模式只创建一个对象&#xff0…...

花朵识别系统Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练

一、介绍 花朵识别系统。本系统采用Python作为主要编程语言&#xff0c;基于TensorFlow搭建ResNet50卷积神经网络算法模型&#xff0c;并基于前期收集到的5种常见的花朵数据集&#xff08;向日葵、玫瑰、蒲公英、郁金香、菊花&#xff09;进行处理后进行模型训练&#xff0c;最…...

中泰免签,准备去泰国旅游了吗?《泰语翻译通》app支持文本翻译和语音识别翻译,解放双手对着说话就能翻译。

泰国是很多中国游客的热门选择&#xff0c;现在去泰国旅游更方便了&#xff0c;因为泰国对中国免签了。如果你打算去泰国&#xff0c;那么下载一个好用的泰语翻译软件是很有必要的。 简单好用的翻译工具 《泰语翻译通》App就是为泰国旅游设计的&#xff0c;它翻译准确&#x…...

C++/Qt 集成 AutoHotkey

C/Qt 集成 AutoHotkey 前言AutoHotkey 介绍 方案一&#xff1a;子进程启动编写AutoHotkey脚本准备 AutoHotkey 运行环境编写 C/Qt 代码 方案二&#xff1a;显式动态链接方案探索编译动态链接库集成到C工程关于AutoHotkeyDll.dll中的函数原型 总结 前言 上一篇介绍了AutoHotkey…...

OpenMV学习第一步安装IDE_2024.09.20

用360浏览器访问星瞳科技官网&#xff0c;一直提示访问不了。后面换了IE浏览器就可以访问。第一个坑。...

RK3568平台(基础篇)万用表的使用

一.万用表的通断判断 万用表两个笔头的插法:黑笔头是插在COM的孔里面,红色笔头可以插在其他的三个孔里面,20A和mA分别用来测电流,另外一个孔可以用来测其他(电压 电阻)。 以下这个三角符号(像wifi一样的)可以用来测通断: 使用万用表的红笔和黑笔进行短接,这时候两端…...

more、less 命令:阅读文本

一、命令简介 ​more​ 和 less​ 都是用于查看文本文件内容的命令&#xff0c;但它们在显示方式和功能上有一些区别。 简单的说 less​ 是 more​ 的升级版&#xff1a;增加了搜索、跳转等功能。所以优先使用 less​&#xff0c;可以不用 more ​了。 ‍ 二、命令参数 基…...

【笔记】1.3 塑性变形

一、塑性变形的方式 DDWs&#xff08;Dislocation-Dipole Walls&#xff0c;位错偶极墙&#xff09;&#xff1a;指由两个位错构成的结构&#xff0c;它们以一种特定的方式排列在一起&#xff0c;形成一个稳定的结构单元。 DTs&#xff08;Dislocation Tangles&#xff0c;位错…...

Java集合(三)

目录 Java集合&#xff08;三&#xff09; Java双列集合体系介绍 HashMap类 HashMap类介绍 HashMap类常用方法 HashMap类元素遍历 LinkedHashMap类 LinkedHashMap类介绍 LinkedHashMap类常用方法 LinkedHashMap类元素遍历 Map接口自定义类型去重的方式 Set接口和Ma…...

【Linux】为 Git 设置 Commit 提交模板方法,可统一个人或者项目的提交风格

为 Git 设置 Commit 提交模板 新建模板文件。注意之后不能删除该文件。 gedit ~/.gitmessage.txt粘贴自己的模板。可以给 AI 提自己的需求&#xff0c;定制一个模板&#xff0c;例如 # <type>(<scope>): <description> # # [optional body] # # [optional…...

set map数据结构

#include <set> #include <iostream> using namespace std;int main() {// 设置控制台输出编码为UTF-8system("chcp 65001");set<int> s1; // 创建一个整数集合// 插入元素s1.insert(5);s1.insert(3);s1.insert(7);s1.insert(1);s1.insert(9);//默…...

大数据量高实时性场景下订单生成的优化方案

文章目录 一、问题背景二、核心优化目标三、架构设计方案3.1 分层架构设计 3.2 关键组件说明 四、核心优化策略4.1 异步处理与流量控制4.1.1 异步接口设计4.1.2 任务进度查询 4.2 批量处理与并行计算4.2.1 数据分批处理4.2.2 并行流处理 4.3 数据库优化4.3.1 批量插入4.3.2 索…...

2025年,百度智能云打响AI落地升维战

如果说从AI到Agent是对于产品落地形态的共识&#xff0c;那么如今百度智能云打响的恰是一个基于Agent进行TO B行业表达的AI生产力升维战。 在这个新的工程体系能力里&#xff0c;除了之前百度Create大会上提出的面向Agent的RAG能力等通用能力模块&#xff0c;对更为专业、个性…...

php中实现邮件发送功能

要在php项目中实现邮件发送功能&#xff0c;推荐使用phpmailer库通过smtp协议配置。首先安装phpmailer扩展&#xff0c;可通过composer命令composer require phpmailer/phpmailer安装&#xff1b;若未使用composer则手动引入源码。接着配置smtp信息&#xff0c;包括服务器地址&…...

机器学习算法时间复杂度解析:为什么它如此重要?

时间复杂度的重要性 虽然scikit-learn等库让机器学习算法的实现变得异常简单&#xff08;通常只需2-3行代码&#xff09;&#xff0c;但这种便利性往往导致使用者忽视两个关键方面&#xff1a; 算法核心原理的理解缺失 忽视算法的数据适用条件 典型算法的时间复杂度陷阱 SV…...

测试设计技术全解析:黑盒与白盒测试的七种武器与覆盖率指标

在软件开发的生命周期中&#xff0c;测试设计技术扮演着至关重要的角色&#xff0c;它直接影响着产品质量和用户体验。测试设计技术主要分为黑盒测试技术和白盒测试技术两大类&#xff0c;它们各有优势和适用场景。黑盒测试技术侧重于从用户视角验证软件功能是否符合需求&#…...

mysql+keepalived

文章目录 一、master1创建目录写入配置文件启动master1创建 `slave` 用户并授权获取主节点当前 `binary log` 文件名和位置position二、master2创建目录写入配置文件启动master2创建 `slave` 用户并授权获取主节点当前 `binary log` 文件名和位置position三、配置主主复制Maste…...

Qt生成日志与以及捕获崩溃文件(mingw64位,winDbg)————附带详细解说

文章目录 Qt生成日志与以及报错文件(mingw64位&#xff0c;winDbg)0 背景与结果0.1 背景0.2 结果1 WinDbg1.1 安装1.2 使用 2 编写代码2.1 ccrashstack类2.2 编写输出捕获异常的dmp文件2.2 编写输出日志文件2.3 调用生成日志和dmp文件 参考 Qt生成日志与以及报错文件(mingw64位…...

stm32_DMA

DMA 1. 概念与基本原理 DMA&#xff0c;全称Direct Memory Access&#xff0c;即直接存储器访问。它是微控制器&#xff08;MCU&#xff09;、嵌入式处理器中的一个独立硬件模块&#xff0c;用于在无需CPU干预的情况下&#xff0c;在不同内存区域&#xff08;包括外设寄存器和…...