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

【更新中】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

相关文章:

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

dijsktra算法模板&#xff1a; def dijkstra(x):#x表示出发点dis[inf]*n #dis记录从x出发到各个点的最短距离&#xff0c;初始化为infdis[x]0 #源点到自己的距离为0vis[False]*n #检查各个点是否访问过for _ in range(n-1): #检查除了源点的其他n-1个点&#xff0c;更新dis…...

Git学习笔记之基础

本笔记是阅读《git pro》所写&#xff0c;仅供参考。 《git pro》网址https://git-scm.com/book/en/v2 git官网 https://git-scm.com/ 一、git起步 1.1、检查配置信息 git config --list查看所有的配置以及它们所在的文件 git config --list --show-origin可能有重复的变量名…...

STCubeIDE 编译bootloader

头文件重复引用解决办法。 参考&#xff1a;STM32CubeIDE IAP原理讲解&#xff0c;及UART双APP交替升级IAP实现-CSDN博客 移植到Air32时&#xff0c;RAM的大小(无论boot程序还是app 程序) 尽量不动&#xff0c;如果动了会影响最终的 APP 跳转 flash 大小可以随意修改&#xf…...

Python学习:函数

函数定义 在Python中&#xff0c;函数&#xff08;Function&#xff09;是一组用于完成特定任务或计算的语句块。定义函数可以让我们将一段代码重用多次&#xff0c;提高代码的可读性和可维护性。以下是定义函数的基本语法和结构&#xff1a; def function_name(parameters):&…...

docker run 使用 -p 命令一直显示端口被占用

解决办法 将 -p 换成 --net host 例如: docker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /root/oneapi/data:/data justsong/one-api # 换成 docker run --name one-api -d --restart always --net...

Rust 实战练习 - 1. 输入,输出,环境变量,字符,字符串

目标&#xff1a; 获取程序命令行参数标准输入输出获取环境变量字符串&#xff0c;字符初步学习 cargo传递参数&#xff0c;需要加上-- use std::{env, ffi::OsString, io, io::Write};fn main() {println!("OS Env: {:?} > {:?}", env::current_dir().unwra…...

RuoYi-Vue-Plus(登录流程)

一、前端登录请求 登录按钮: src\views\login.vue 页面中登录片段,调用了handleLogin 方法,如下: @click.native.prevent="handleLogin" <el-button:loading="loading"size="medium"type="primary"style="width:100%;&qu…...

【数学】 【分数】 【字符串】972. 相等的有理数

本文涉及知识点 数学 分数 字符串 LeetCode972. 相等的有理数 给定两个字符串 s 和 t &#xff0c;每个字符串代表一个非负有理数&#xff0c;只有当它们表示相同的数字时才返回 true 。字符串中可以使用括号来表示有理数的重复部分。 有理数 最多可以用三个部分来表示&…...

【4】DongshanPI-Seven 应用开发_文件IO

目录 1.文件IO1.1 文件IO分类1.2 查看系统调用IO用法 2. open 函数3. write 函数4. read 函数5 dup函数 1.文件IO 1.1 文件IO分类 在Linux系统中&#xff0c;一切都是“文件”&#xff1a;普通文件、驱动程序、网络通信等。所有的操作都是通过文件IO来操作的。 在Linux操作文…...

SEO 的未来:GPT 和 AI 如何改变关键词研究

谷歌Gemini与百度文心一言&#xff1a;AI训练数据的较量 介绍 想象一下&#xff0c;有一个工具不仅可以理解错综复杂的关键字网络&#xff0c;还可以预测搜索引擎查询的变化趋势。 这就是生成式预训练 Transformer (GPT) 和其他人工智能技术发挥作用的地方&#xff0c;以我们从…...

面试八股文之JAVA基础

JAVA基础 DNS、CDN&#xff1f;如何实现对象克隆?父子类静态代码块, 非静态代码块, 构造方法执行顺序?String s new String("abc") 创建了几个对象, 分别放到哪里?OSI网络模型七层&#xff1f;应用层协议&#xff1f;http协议和https协议区别&#xff1f;传输层协…...

网络连接中——长连接和短连接详解

一、TCP功能 TCP在真正开始进行数据传输之前,Server 和 Client 之间必须建立一个连接。当数据传输完成后,双方不再需要这个连接时,就可以释放这个连接。 TCP连接的建立是通过三次握手,而连接的释放是通过四次挥手。所以说,每个TCP连接的建立和释放都是需要消耗资源和时间…...

PEReDi 完全隐私的央行数字货币方案

第一个对完全隐私保护建模的方案&#xff0c;基于账户模型&#xff0c;要求交易双方都在线。 角色分类 中央银行 B B B&#xff1a;负责发行数字货币和货币政策&#xff0c;但不控制用户账户的状态&#xff0c;没有能力对交易的发送者或接收者进行去匿名化或披露与特定交易相…...

yolov5+pyside6+登录+用户管理目标检测可视化源码

一、软件简介 这是基于yolov5目标检测实现的源码&#xff0c;提供了用户登录功能界面&#xff1b; 用户需要输入正确的用户名和密码才可以登录。如果是超级管理员&#xff0c;可以修改普通用户的信息&#xff0c;并且在检测界面的右上角显示【管理用户】按钮。 支持图片、视频、…...

电脑如何设置个性便签 电脑个性便签分享

每次坐在电脑前&#xff0c;我都仿佛置身于一片信息的海洋。工作、生活、学习&#xff0c;方方面面的事情都需要我用心去记录。在这样一个快节奏的时代&#xff0c;电脑无疑成了我最得力的助手。但记事的时候&#xff0c;我总希望有一个既方便又有个性的工具&#xff0c;能让我…...

备考ICA----Istio实验12---配置双向TLS Istio Ingress Gateway实验

备考ICA----Istio实验12—配置双向TLS Istio Ingress Gateway实验 本实验部分配置延续上个Istio实验11 1. 重新配置secret 重新配置secret使其带有ca证书可以验证客户端证书是否合法 先删除原有secret,再配置新的secret # 删除原tls类型的secret kubectl -n istio-system d…...

SpringBoot 统一后端返回格式、处理全局异常

文章目录 引言I 统一标准格式1.1 定义返回标准格式1.2 定义状态码1.3 返回数据模型1.4 枚举定义1.5 Json序列化处理1.6 获取枚举字典II 处理全局异常2.1 全局异常处理器2.2 自定义异常2.3 请求数据模型III 预备知识:注解3.1 JsonInclude3.2 JsonIgnoreProperties...

C++学习基础版(一)

目录 一、C入门 1、C和C的区别 2、解读C程序 3、命名空间 4、输入输出 &#xff08;1&#xff09;cout输出流 &#xff08;2&#xff09;endl操纵符 &#xff08;3&#xff09;cin输入流 二、C表达式和控制语句 1、数据机构 特别&#xff1a;布尔类型bool 2、算数运…...

Rust 双向链表 LinkedList 和安全删除元素的方法

一、LinkedList 基本用法 在Rust中&#xff0c;LinkedList 是标准库中 std::collections 模块提供的一个双向链表实现。这个双向链表在每个节点中都保存了其前一个和后一个节点的引用&#xff0c;允许在链表的任一端进行有效的添加和移除操作。 以下是一个简单的示例&#xf…...

Android 开发中 Gradle 使用详解:构建、配置与优化技巧

文章目录 1. 基本概念2. 配置构建脚本2.1 项目级构建脚本2.2 模块级构建脚本 3. 自定义构建变体和应用 flavorDimensions4. 多模块项目4.1 创建模块4.2 配置模块依赖 5. 使用 Gradle 插件6. 使用 Gradle 命令 Gradle 是一种先进的构建工具&#xff0c;它被广泛应用于 Android 开…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...