743. 网络延迟时间(最短路径)

2023-11-02 08:48

本文主要是介绍743. 网络延迟时间(最短路径),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

给定一个列表 times,表示信号经过有向边的传递时间。 times[i] = (u, v, w),其中 u 是源节点,v 是目标节点, w 是一个信号从源节点传递到目标节点的时间。

现在,我们向当前的节点 K 发送了一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1

Example 1:

Input: times = [[2,1,1],[2,3,1],[3,4,1]], N = 4, K = 2
Output: 2

注意:

  1. N 的范围在 [1, 100] 之间。
  2. K 的范围在 [1, N] 之间。
  3. times 的长度在 [1, 6000] 之间。
  4. 所有的边 times[i] = (u, v, w) 都有 1 <= u, v <= N 且 0 <= w <= 100

思路:这题目是一个有向图求最短路径的问题,求出K点到每一个点到最短路径,然后取其中最大的一个就是需要的时间了。

采用Dijkstra算法来求有向图的最短路径。

1、先回顾一下Dijkstra算法原理。

2、Dijkstra算法伪代码:

//G为图,S,U,K为起点
Dijkstra(G, U, S)
{初始化;for(循环n次,每次向S中添加一个顶点){uu = 去U中找出路径最小的顶点的标号;在U中删掉uu,并且将uu将入到S中for(在U中遍历从uu出发能到达的所有顶点v){if(以uu为中介点使s到顶点v的最短距离d[v]更优){优化d[v];}}}
}

3、设计Dijkstra算法所用到的数据结构:

数据结构的设计应该有很多种方法,我就选了一种最朴素的:

用两个vector表示S和U,每个vector里面索引值存顶点,元素值存源点到该顶点的路径长度。

另外,考虑到数组中删除元素代价比较大,所以我额外建了一个标记数组visited,用来标记U中被移除的顶点。

4、最后,代码实现一下:

class Solution {
public:int networkDelayTime(vector<vector<int>>& times, int N, int K) {//定义并初始化S,U,visitedvector<int>S(N+1, INT_MAX), U=S;vector<bool>v(N+1, true);U[K]=0;//每次处理掉一个顶点for(int c=1; c<=N; ++c){//去U中找最小路径int uu=0;for(int i=1; i<=N; ++i){if(v[i] && U[i]<U[uu])uu=i;}//在U中删掉uu,并且将uu将入到S中v[uu]=false;S[uu]=U[uu];//在U中遍历(要求该点在v中的值为true)从uu出发能到达的所有顶点v(从题目中给的G下手)for(auto x:times){if(x[0]==uu && v[x[1]] && S[uu]+x[2]<U[x[1]]){//以uu为中介点使s到顶点v的最短距离d[v]更优U[x[1]]=S[uu]+x[2];}}}//此时S中存的应该是K到每一个顶点的最短路径了//去S中找出最大值int re=0;for(int i=1; i<=N; ++i){//注意要从第一个元素算起re=max(re, S[i]);}return re==INT_MAX ?-1:re;//有可能有的点找不到最短路径}
};

 

这篇关于743. 网络延迟时间(最短路径)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/329463

相关文章

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Python中Windows和macOS文件路径格式不一致的解决方法

《Python中Windows和macOS文件路径格式不一致的解决方法》在Python中,Windows和macOS的文件路径字符串格式不一致主要体现在路径分隔符上,这种差异可能导致跨平台代码在处理文... 目录方法 1:使用 os.path 模块方法 2:使用 pathlib 模块(推荐)方法 3:统一使

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod

MySQL9.0默认路径安装下重置root密码

《MySQL9.0默认路径安装下重置root密码》本文主要介绍了MySQL9.0默认路径安装下重置root密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录问题描述环境描述解决方法正常模式下修改密码报错原因问题描述mysqlChina编程采用默认安装路径,