【更新中】Leetcode中遇到的最短路径算法

dijsktra算法模板:

def dijkstra(x):#x表示出发点dis=[inf]*n #dis记录从x出发到各个点的最短距离,初始化为infdis[x]=0    #源点到自己的距离为0vis=[False]*n #检查各个点是否访问过for _ in range(n-1): #检查除了源点的其他n-1个点,更新disnode=-1 #开始假设不知道谁是离源点最近的点for j in range(n):#循环查找谁是离源点最近的那个点if not vis[j] and (node==-1 or dis[j]<dis[node]):node=jfor j in range(n):#对node的邻居点进行松弛处理dis[j]=min(dis[j],dis[node]+g[node][j])vis[node]=True #对node点标记为已访问

​​​​​​​743. 网络延迟时间
因为本题的节点是从1到n,所以最后把dis数组中的第一个忽略掉(dis[1:])

然后就是经典的dijkstra最短路径算法,套用模板即可。

class Solution:def networkDelayTime(self, times: List[List[int]], n: int, k: int) -> int:g=[[inf]*(n+1) for _ in range(n+1)]for x,y,w in times:g[x][y]=wdis=[inf]*(n+1)dis[k]=0vis=[False]*(n+1)for _ in range(n):x=-1for i in range(1,n+1):if not vis[i] and (x==-1 or dis[i]<dis[x]):x=ifor i in range(1,n+1):dis[i]=min(dis[i],dis[x]+g[x][i])vis[x]=Trueans=max(dis[1:])return ans if ans!=inf else -1

2642. 设计可以求最短路径的图类
又是dijkstra最短路径算法,这里需要判断一下能否到达终点的问题:

class Graph:def __init__(self, n: int, edges: List[List[int]]):self.n=nself.g=[[float("INF")]*n for _ in range(self.n)]for x,y,cost in edges:self.g[x][y]=costdef addEdge(self, edge: List[int]) -> None:self.g[edge[0]][edge[1]]=edge[2]def shortestPath(self, node1: int, node2: int) -> int:n=len(self.g)dis=[float('INF')]*ndis[node1]=0vis=[False]*nwhile 1:x=-1for i,(b,d) in enumerate(zip(vis,dis)):if not b and (x<0 or d<dis[x]):x=iif x<0 or dis[x]==float('INF'):return -1if x==node2:return dis[x]vis[x]=Truefor y,w in enumerate(self.g[x]):if dis[x]+w<dis[y]:dis[y]=dis[x]+w# Your Graph object will be instantiated and called as such:
# obj = Graph(n, edges)
# obj.addEdge(edge)
# param_2 = obj.shortestPath(node1,node2)

1334. 阈值距离内邻居最少的城市
枚举每个点作为出发点,算法返回小于等于阈值的数目即可。

因为题目要求返回数量最少且编号最大的点,所以从n-1到0遍历即可。

class Solution:def findTheCity(self, n: int, edges: List[List[int]], distanceThreshold: int) -> int:g=[[inf]*n for _ in range(n)]for x,y,w in edges:g[x][y]=wg[y][x]=w#枚举每个点作为出发点,做dijkstra算法def dijkstra(x):dis=[inf]*ndis[x]=0vis=[False]*nfor _ in range(n-1):node=-1for j in range(n):if not vis[j] and (node==-1 or dis[j]<dis[node]):node=jfor j in range(n):dis[j]=min(dis[j],dis[node]+g[node][j])vis[node]=Truereturn sum(d<=distanceThreshold for d in dis)ans,cnt=n,inf    for i in range(n-1,-1,-1):if dijkstra(i)<cnt:cnt=dijkstra(i)ans=ireturn ans

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/776816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Android 源码】Android源码下载指南

文章目录 前言安装Repo初始化Repo选择分支没有梯子替换为清华源 有梯子 下载源码下载开始参考 前言 这是关于Android源码下载的过程记录。 环境&#xff1a;Windows上通过VMware安装的Ubuntu系统 安装Repo 创建Repo文件目录 mkdir ~/bin PATH~/bin:$PATH下载Repo工具&#…

回文子串 每日温度 接雨水

647. 回文子串 力扣题目链接 如果s【i】和s【j】相同 dp【i1】【j-1】也是回文串的话 &#xff08;等于true&#xff09; 那么dp【i】【j】也是回文串 true 定义一个bool二维数组 遍历顺序是从下到上 从左到右 因为dp【i】【j】是通过dp【i1】【j-1】推出来的 i从最后一…

【漏洞复现】用友U8Cloud nc.bs.sm.login2.RegisterServlet SQL注入漏洞

0x01 产品简介 用友U8 Cloud是用友推出的新一代云ERP,主要聚焦成长型、创新型企业,提供企业级云ERP整体解决方案 0x02 漏洞概述 用友U8Cloud nc.bs.sm.login2.RegisterServlet接口处存在SQL注入漏洞,未授权的攻击者可通过此漏洞获取数据库权限,从而盗取用户数据,造成用…

OpenGL 实现“人像背景虚化“效果

手机上的人像模式,也被人们称作“背景虚化”或 ”双摄虚化“ 模式,也称为 Bokeh 模式,能够在保持画面中指定的人或物体清晰的同时,将其他的背景模糊掉。突出画面的主体部分,主观上美感更强烈。 人像模式的一般实现原理是,利用双摄系统获取景深信息,并通过深度传感器和图…

WorkPlus智能AI助理:定制化部署,拓展企业协作新境界

近年来&#xff0c;随着人工智能技术不断发展&#xff0c;智能助理在企业管理中发挥着日益重要的作用。其中&#xff0c;WorkPlus智能AI助理作为一款支持私有化部署的新一代智能助理软件&#xff0c;为企业内部协作场景带来了全新的可能性。通过结合企业自身的行业知识和应用场…

英伟达推出“地表最强AI芯片”

B站&#xff1a;啥都会一点的研究生公众号&#xff1a;啥都会一点的研究生 近期AI相关资讯&#xff0c;一起看看吧~ Neuralink首位脑芯片患者用意念下棋 埃隆-马斯克&#xff08;Elon Musk&#xff09;的脑芯片初创公司 Neuralink 展示了其首位脑芯片患者仅用意念下棋的情景…

VMware vSAN OSA存储策略 - 基于虚拟机的分布式对象存储

简介 博客&#xff1a;https://songxwn.com/ 存储策略 (Storage Policy) 是管理员定义的一组规则&#xff0c;这组规则定义了数据对象在 vSAN 存储上是如何保存的&#xff0c;存储策略定义了数据存储的可靠性、访问性能等特性。vSAN 提供了基于存储策略的存储管理 SPBM (Stor…

基于java实现的高校二手交易平台

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclip…

无服务数据库是未来的趋势吗?

无服务数据库是未来的趋势吗&#xff1f; 无服务器数据库是未来的趋势吗&#xff1f;无服务器数据库与传统云数据库有何不同&#xff1f; Amazon Aurora Serverless&#xff08;如下图所示&#xff09;是 Amazon Aurora 的一种配置方式&#xff0c;可以按需自动扩展。 Aurora…

针对ETC系统的OBE-SAM模块设计方案

ETC系统组成及工作原理 ETC系统由前端系统和后台数据库系统组成&#xff0c;总体的架构如下图所示&#xff1a; 前端系统包含安装在汽车挡风玻璃上的车载单元&#xff08;On Board Unit&#xff0c;简称OBU&#xff09;、路侧单元&#xff08;Roadside Unit&#xff0c;简称RS…

深入解析Spring MVC: 原理、流程【面试版】

什么是SpringMV? 1.是一个基于MVC的web框架&#xff1b; 2.是spring的一个模块&#xff0c;是spring的子容器&#xff0c;子容器可以拿父容器的东西&#xff0c;但是反过来不可&#xff1b; 2.SpringMVC的前端控制器是DispatcherServlet&#xff0c;用于分发请求。使开发变…

python--切片

1.切片&#xff1a; 切片是编程语言为有序序列&#xff08;sequence&#xff09;准备的&#xff0c;用来切割或者截取某个片段 一个完整的切片是包含三个参数和两个冒号" : " ,用于分隔三个参数(start_index、end_index、step)。当只有一个“:”时&#xff0c;默认第…

深度学习(三)vscode加jupyter notebook插件使用

0.前言 哎呀&#xff0c;我本次的实验是在新电脑上使用的&#xff0c;之前的笔记本上的环境什么的我都是很久以前弄好了的&#xff0c;结果到了新电脑上我直接忘了是该怎么配的了&#xff0c;不过万幸&#xff0c;花了点时间&#xff0c;查查补补&#xff0c;现在总算是可以了。…

elasticsearch 6.8.x 索引别名、动态索引扩展、滚动索引

文章目录 引言索引别名&#xff08;alias&#xff09;创建索引别名查询索引别名删除索引别名重命名索引别名 动态索引&#xff08;index template&#xff0c;动态匹配生成索引&#xff09;新建索引模板新建索引并插入数据索引sys-log-202402索引sys-log-202403索引sys-log-202…

Llama模型下载

最近llama模型下载的方式又又变了&#xff0c;所以今天简单更新一篇文章&#xff0c;关于下载的&#xff0c;首先上官网&#xff0c;不管在哪里下载你都要去官网登记一下信息&#xff1a;https://llama.meta.com/llama2 然后会出现下面的信息登记网页&#xff1a; 我这里因为待…

MoonBit MeetUp回顾——狼叔:我在期待下一个十年,目前没有找到更好的方向,所以从月兔开始!

狼叔在他的发言中&#xff0c;分享了自己对前端与后端技术、个人职业发展的思考&#xff0c;以及对独立开发者和技术栈变化的探索。 狼叔讲述了在大厂工作的经验&#xff0c;包括面对裁员和职业焦虑的挑战。狼叔强调了编码技能的重要性&#xff1a;“首先&#xff0c;编码是一项…

【LeetCode热题100】236. 二叉树的最近公共祖先(二叉树)

一.题目要求 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可…

[SpringCloud] Feign Client 的创建 (一) (四)

文章目录 1.FeignClientsRegistrar2.完成配置注册2.1 registerDefaultConfiguration方法2.2 迭代稳定性2.3 registerFeignClients方法 1.FeignClientsRegistrar FeignClientsRegistrar实现ImportBeanDefinitionRegistrar接口。 2.完成配置注册 public void registerBeanDefinit…

浏览器工作原理与实践--作用域链和闭包 :代码中出现相同的变量,JavaScript引擎是如何选择的

在上一篇文章中我们讲到了什么是作用域&#xff0c;以及ES6是如何通过变量环境和词法环境来同时支持变量提升和块级作用域&#xff0c;在最后我们也提到了如何通过词法环境和变量环境来查找变量&#xff0c;这其中就涉及到作用域链的概念。 理解作用域链是理解闭包的基础&#…

Verilog语法之assign语句学习

assign语法主要是对组合逻辑的变量进行赋值的&#xff0c;就是把一个变量赋值给另一个变量&#xff0c;被复制的变量必须是wire类型的参数。 从仿真结果可以看出&#xff0c;data_in变量的值赋值给了data_out,assign语法就是赋值没有任何延迟&#xff0c;data_in是什么值&#…