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

【CS.AL】算法核心之贪心算法 —— 力扣(LeetCode)743. 网络延迟时间 - Dijkstra算法题解

文章目录

    • 题目描述
    • References

题目描述

743. 网络延迟时间 - 力扣(LeetCode)

N 个网络节点,标记为 1N

给定一个列表 times,其中 times[i] = (u, v, w) 表示有一条从节点 u 到节点 v 的时延为 w 的有向边。

现在,我们从某个节点 K 发送一个信号。需要多少时间才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1

示例:

输入: times = [[2,1,1],[2,3,1],[3,4,1]], N = 4, K = 2
输出: 2

可以使用 Dijkstra 算法来解决这个问题。算法的步骤如下:

  1. 构建邻接表:将输入的 times 转换成图的邻接表表示。 Ref. 【CS.DS】数据结构 —— 图:深入了解三种表示方法之邻接表(Adjacency List)
  2. 初始化数据结构:距离数组 dist[],所有节点的距离初始化为无穷大,起点的距离设为 0;优先级队列 pq 存储每个节点及其当前已知的最短距离。
  3. 执行 Dijkstra 算法:使用优先级队列选择当前距离起点最近的节点,更新其邻接节点的距离,并将更新后的节点加入队列。
  4. 计算结果:在所有节点都收到信号时,返回最大的距离;如果有节点未收到信号,返回 -1
#include <vector>
#include <unordered_map>
#include <queue>
#include <climits>using namespace std;int networkDelayTime(vector<vector<int>>& times, int N, int K) {// 构建图的邻接表unordered_map<int, vector<pair<int, int>>> graph;for (const auto& time : times) {int u = time[0], v = time[1], w = time[2];graph[u].emplace_back(v, w);}// 初始化距离表vector<int> dist(N + 1, INT_MAX);dist[K] = 0;// 优先队列,按距离从小到大排序priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;pq.emplace(0, K);while (!pq.empty()) {auto [current_dist, u] = pq.top();pq.pop();if (current_dist > dist[u]) {continue;}for (const auto& [v, w] : graph[u]) {int distance = current_dist + w;if (distance < dist[v]) {dist[v] = distance;pq.emplace(distance, v);}}}int max_dist = 0;for (int i = 1; i <= N; ++i) {if (dist[i] == INT_MAX) {return -1;}max_dist = max(max_dist, dist[i]);}return max_dist;
}int main() {vector<vector<int>> times = {{2,1,1},{2,3,1},{3,4,1}};int N = 4;int K = 2;int result = networkDelayTime(times, N, K);if (result == -1) {cout << "无法使所有节点都收到信号" << endl;} else {cout << "所有节点都收到信号所需的时间: " << result << endl;}return 0;
}
  • 构建图的邻接表
    • 我们使用 unordered_map 将每个节点的邻接节点及其权重存储起来。
  • 初始化距离数组和优先级队列
    • 距离数组 dist 用于记录从起点到每个节点的最短距离,初始时所有距离设为无穷大,起点的距离设为 0。
    • 优先级队列 pq 用于高效选择当前距离最短的节点,初始时将起点入队。
  • Dijkstra 算法
    • 每次从优先级队列中取出距离最短的节点,更新其邻接节点的距离,并将更新后的节点加入队列。
  • 计算结果
    • 遍历距离数组,找到所有节点中最大的距离作为结果。如果有节点的距离仍为无穷大,返回 -1

References

  • 【CS.AL】算法核心之贪心算法:从入门到进阶
  • 【CS.DS】数据结构 —— 图:深入了解三种表示方法之邻接表(Adjacency List)
  • 【CS.AL】算法核心之贪心算法:从入门到进阶

相关文章:

【CS.AL】算法核心之贪心算法 —— 力扣(LeetCode)743. 网络延迟时间 - Dijkstra算法题解

文章目录 题目描述References 题目描述 743. 网络延迟时间 - 力扣&#xff08;LeetCode&#xff09; 有 N 个网络节点&#xff0c;标记为 1 到 N。 给定一个列表 times&#xff0c;其中 times[i] (u, v, w) 表示有一条从节点 u 到节点 v 的时延为 w 的有向边。 现在&#xf…...

25、架构-微服务的驱动力

微服务架构的驱动力可以从多方面探讨&#xff0c;包括灵活性、独立部署、技术异构性、团队效率和系统弹性等。 灵活性和可维护性 灵活性是微服务架构的一个主要优势。通过将单体应用拆分成多个独立的微服务&#xff0c;开发团队可以更容易地管理、维护和更新各个服务。每个微…...

JeecgFlow事件网关概念及案例

事件网关 通常网关基于连线条件决定后续路径&#xff0c;但事件网关有所不同&#xff0c;其基于事件决定后续路径。事件网关的每条外出顺序流都需要连接一个捕获中间事件。 事件网关只有分支行为&#xff0c;流程的走向完全由中间事件决定。可以从多条候选分支中选择事件最先达…...

使用鸿蒙HarmonyOs NEXT 开发 快速开发 简单的购物车页面

目录 资源准备&#xff1a;需要准备三张照片&#xff1a;商品图、向下图标、金钱图标 1.显示效果&#xff1a; 2.源码&#xff1a; 资源准备&#xff1a;需要准备三张照片&#xff1a;商品图、向下图标、金钱图标 1.显示效果&#xff1a; 定义了一个购物车页面的布局&#x…...

iOS 中 attribute((constructor)) 修饰的函数

开发环境声明&#xff1a;此文描述的 attribute((constructor)) 特指使用 Objective-C 开发 iOS、MacOS&#xff0c;Swift 语言不支持这种属性修饰符。 初识 attribute((constructor)) 在 Objective-C 开发中&#xff0c;attribute((constructor)) 是一个 GCC 和 Clang 编译器…...

原生js实现图片预览控件,支持丝滑拖拽,滚轮放缩,放缩聚焦

手撸源代码如下&#xff1a;注释应该很详细了&#xff0c;拿去直用 可以放到在线编辑器测试&#xff0c;记得修改图片路径 菜鸟教程在线编辑器 <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" conten…...

C语言入门课程学习笔记9:指针

C语言入门课程学习笔记9 第41课 - 指针&#xff1a;一种特殊的变量实验-指针的使用小结 第42课 - 深入理解指针与地址实验-指针的类型实验实验小结 第43课 - 指针与数组&#xff08;上&#xff09;实验小结 第44课 - 指针与数组&#xff08;下&#xff09;实验实验小结 第45课 …...

借助 Cloudflare D1 和 Drizzle 在 Astro 上实现全栈

使用 Cloudflare D1 和 Drizzle ORM 将后端添加到 Astro 项目的分步指南 文章目录 安装 Astro添加 Cloudflare 适配器部署到 Pages安装 wrangler 并登录创建 D1 数据库创建 wrangler.toml 文件将 .wrangler 添加到 .gitignore更新 astro.config.ts安装 Drizzle 依赖项创建 driz…...

SUSE linux 15的网络管理

1 手工配置网络 wicked提供了一种新的网络配置框架。自SUSE 12起&#xff0c;SUSE使用了新的网络管理工具wicked&#xff0c;这个是区别与其他常见发行版的。常见的发行版目前大多使用的是NetworkManager服务进行网络管理。 1.1 wicked网络配置 传统网络接口管理面临的挑战之…...

海康威视-下载的录像视频浏览器播放问题

目录 1、播放异常比对 2、视频编码检查 2.1、正常视频解析 2.2、海康视频解析 2.3、比对工具 3、转码 3.1、maven依赖 3.2、实现代码 4、验证 在前面的文章&#xff08;海康威视-按时间下载录像文件_海康威视 sdk 下载录像 大小0-CSDN博客&#xff09;中&#xff0c;通…...

养殖自动化管理系统:开启智慧养殖新篇章

在现代农业的快速演进中&#xff0c;养殖业正经历一场前所未有的技术革命。养殖自动化管理系统&#xff0c;作为这场变革的前沿科技&#xff0c;正逐步成为推动行业高效、环保、可持续发展的关键力量。本文将深入探讨自动化养殖系统如何通过精准管理、智能监控、数据驱动决策&a…...

SmartEDA革新来袭:融合Multisim与Proteus精髓,引领电子设计新纪元!

在电子设计领域&#xff0c;每一次技术的革新都如同春风化雨&#xff0c;滋润着设计师们的心田。今天&#xff0c;我们迎来了一个划时代的电子设计自动化&#xff08;EDA&#xff09;工具——SmartEDA&#xff0c;它不仅融合了业界知名的Multisim和Proteus的精华&#xff0c;更…...

【FFmpeg】AVFormatContext结构体

【FFmpeg】AVFormatContext结构体 1.AVFormatContext结构体1.2 const struct AVInputFormat *iformat1.3 const struct AVOutputFormat *oformat 参考&#xff1a; FFMPEG结构体分析&#xff1a;AVFormatContext 示例工程&#xff1a; 【FFmpeg】调用ffmpeg库实现264软编 【FF…...

【SpringSecurity】认证与鉴权框架SpringSecurity——授权

目录 权限系统的必要性常见的权限管理框架SpringSecurity授权基本流程准备脚本限制访问资源所需权限菜单实体类和Mapper封装权限信息封装认证/鉴权失败处理认证失败封装鉴权失败封装配置SpringSecurity 过滤器跨域处理接口添加鉴权hasAuthority/hasAnyAuthorityhasRole/​ hasA…...

深入解析FTP:原理、架构与搭建方式

在当今互联网世界中&#xff0c;文件传输是日常工作和生活中不可或缺的一部分。FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09;作为一种老而弥坚的协议&#xff0c;一直在文件传输领域发挥着重要作用。本文将从技术人的角度&#xff0c;详细分析F…...

Springboot与RestTemplate

RestTemplate是Spring提供的用于访问Rest服务的客户端&#xff0c;RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。 一、使用Get进行访问 1、获取json格式 使用 getForEntity() API 发起 GET 请求&#xff1a; RestTemplate restTemplate…...

端口发布与暴露

端口发布与暴露 目录 发布端口发布到临时端口发布所有端口试一试 使用 Docker CLI使用 Docker Compose 如果你一直在跟随本指南&#xff0c;你应该理解容器为应用程序的每个组件提供了隔离的进程。每个组件 - 如 React 前端、Python API 和 Postgres 数据库 - 都运行在自己的…...

Unity:使用Texture2D动态创建的图像无法正常显示 / 修改图像后未生效

开发中遇到需要动态绘制图像的需求&#xff0c;前后文代码如下所示&#xff1a; Texture2D newImageTexture new Texture2D(width, height); Color32[] newImagePixels new Color32[height * width];for (int y 0; y < height ; y) {for (int x 0; x < width; x){if…...

【LinuxC语言】详解TCP/IP

文章目录 前言TCP与UDP协议的介绍TCP协议流式传输TCP的三次握手连接TCP的四次挥手连接断开总结前言 在我们的日常生活中,无论是浏览网页,还是发送电子邮件,甚至是在线视频聊天,都离不开网络通信。而在网络通信中,TCP和UDP协议起着至关重要的作用。本文将以通俗易懂的语言…...

数字化转型下的企业人力资源信息系统研究

随着数字化转型的加速&#xff0c;企业人力资源管理面临着全新的挑战和机遇。传统的人力资源信息系统&#xff08;HRIS&#xff09;在新时代的要求下必须进行深刻的革新和升级&#xff0c;以更好地支持企业的发展战略和员工的需求。 数据驱动的决策支持 在当今这个信息化迅猛发…...

避坑指南:STM32CubeMX配置高级定时器PWM时,时钟源、ARR重载和DMA传输的那些坑

STM32高级定时器PWM配置实战&#xff1a;从时钟陷阱到DMA优化的深度解析 引言 深夜的实验室里&#xff0c;示波器上跳动的波形总是不尽如人意——这可能是许多嵌入式开发者使用STM32高级定时器输出PWM时的共同经历。不同于基础定时器&#xff0c;高级定时器&#xff08;如TIM1/…...

用于免训练手术视频分割的记忆增强SAM2(MA-SAM2)

学影像 手术视频 基础模型增强 ──────────────────────────────────────── 1. 标题 英文:Memory-Augmented SAM2 for Training-Free Surgical Video Segmentation 中文:用于免训练手术视频分割的记忆增强SAM2(MA-SAM2) 2. 作者…...

从特征稀缺到精准定位:基于HS-FPN与可变形注意力的白细胞检测新范式

1. 白细胞检测的现状与挑战 在医学影像分析领域&#xff0c;白细胞检测一直是个让人头疼的问题。想象一下&#xff0c;医生需要从密密麻麻的血细胞图像中找出白细胞&#xff0c;就像在沙滩上找特定形状的贝壳一样困难。传统方法主要依赖医生手动操作显微镜&#xff0c;不仅效率…...

FreeRTOS互斥信号量实战:用STM32CubeIDE解决多任务访问共享串口的优先级翻转问题

FreeRTOS互斥信号量实战&#xff1a;用STM32CubeIDE解决多任务访问共享串口的优先级翻转问题 在嵌入式系统开发中&#xff0c;多任务并发访问共享资源是一个常见且棘手的问题。想象一下这样的场景&#xff1a;你的STM32设备上有两个任务需要向同一个串口发送数据——一个高优先…...

保姆级教程:用STM32+ESP8266+微信小程序,5分钟搞定Onenet数据上传与设备控制

零基础实战&#xff1a;STM32ESP8266微信小程序极速对接Onenet全指南 在物联网技术快速普及的今天&#xff0c;许多嵌入式开发者都希望快速搭建一个完整的智能设备系统。本文将带你用最简单的方式&#xff0c;通过STM32微控制器、ESP8266 WiFi模块和微信小程序&#xff0c;实现…...

告别重复劳动:用这个Maya Mel脚本插件,5分钟搞定Arnold材质批量调节

告别重复劳动&#xff1a;Maya Mel脚本插件在Arnold材质批量调节中的高效应用 在三维动画和视觉特效制作中&#xff0c;材质调节往往是项目后期最耗时的环节之一。当导演皱着眉头说"这个场景的金属感太强了"或者客户反馈"整体色调需要更暖一些"时&#xf…...

【免费下载】 Airplayer:苹果设备投屏的终极解决方案

Airplayer&#xff1a;苹果设备投屏的终极解决方案 【下载地址】Airplayer苹果投屏软件 Airplayer是一款专为苹果设备设计的高效投屏软件&#xff0c;它允许用户轻松地将iPhone或iPad屏幕的内容无线传输到电脑上显示。无论是播放视频、展示照片、进行会议演示还是游戏分享&…...

Gridforms响应式设计原理:如何让表单在手机、平板和桌面端完美适配

Gridforms响应式设计原理&#xff1a;如何让表单在手机、平板和桌面端完美适配 【免费下载链接】gridforms Data entry can be beautiful 项目地址: https://gitcode.com/gh_mirrors/gr/gridforms Gridforms是一个专注于数据录入体验的响应式表单解决方案&#xff0c;通…...

NotebookLM审稿回复效率提升300%:用结构化Prompt工程重构Response框架(含可直接导入的Notion模板)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM审稿意见回复的范式变革 从线性批注到语义驱动的协同迭代 NotebookLM 不再将审稿意见视为静态文本批注&#xff0c;而是将其作为结构化知识图谱的输入节点。当用户上传论文 PDF 与审稿人意见…...

解放Windows潜能:APK安装器让安卓应用在电脑上完美运行

解放Windows潜能&#xff1a;APK安装器让安卓应用在电脑上完美运行 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾梦想过在Windows电脑上直接运行手机应用&am…...