[Leetcode] 每日两题 743 1631 -day96 dijkstra算法专题

重温 dijkstra算法

Dijkstra算法 (迪杰斯特拉算法 ,卜老师纠正过是叫戴斯特比较标准)是典型最短路径算法,用于计算一个节点到其他节点的最短路径。
类似于广度优先搜索,它的主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。

基本步骤 :

  1. 指定起点s;

  2. 定义一个数组dis表示s到每个点的距离,集合Q记录当前求出的最短路径点(距离起点)以及距离,一开始Q中只有s一个点且距离为0,而visited数组用于标记节点是否已经求出距离起点的最短距离;

  3. 找出Q的 当前求出的路径的最小值对于的节点,然后根据该节点的邻接点来更新dis以及更新Q。循环第三步 直到所有的节点都求出距离S的最短距离。

关键算法流程:

​ 1. 首先构建节点的邻接表

2.优先队列用于储存当前已拓展节点构成的距离起点的距离队列  包含两个元素 (dis,node)dis表示起点到该node距离 ,将(0,s) 加入队列 

​ 3.队列元素不断弹出 ,每弹出一个没求出最小值的节点(visited标识)访问该节点的邻接表

​ 对于该节点 tmp 的所有邻接点,计算若 起点 先走到tmp再到其邻接点的距离是否小于当前 dis表中节点到这些邻接点的距离,若小于则更新 ,且将(更新后的距离,节点序号 )加入到优先队列中

标识该节点tmp 已经求出最小值,之后若队列弹出tmp 不对其邻接点进行拓展

循环3

743. 网络延迟时间

在这里插入图片描述

​ 对应题目 采用以上描述的方法
在这里插入图片描述

class Solution:
    def networkDelayTime(self, times: List[List[int]], n: int, k: int) -> int:

        k = k-1
        dis = [9999]*n
        vis = [0]*n
        tgl 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值