2024.7.7刷题记录

目录

[一、849. Dijkstra求最短路 I - AcWing题库](#一、849. Dijkstra求最短路 I - AcWing题库)

[二、850. Dijkstra求最短路 II - AcWing题库](#二、850. Dijkstra求最短路 II - AcWing题库)


根据讲解视频写的代码

一、849. Dijkstra求最短路 I - AcWing题库

python 复制代码
N = 600
MAXL = 10010    # 最长边长
# 稠密图邻接矩阵
g = [[MAXL] * N for _ in range(N)]
dist = [MAXL] * N   # 储存到节点1的距离
st = [False for _ in range(N)]

R = lambda: map(int, input().split())
n, m = R()
for _ in range(m):
    x, y, z = R()
    g[x][y] = min(g[x][y], z)   # 重边保留最小值
    
def dijkstra() -> int:
    dist[1] = 0
    for _ in range(n):
        # 寻找未知节点中的最短距离节点
        t = -1
        for i in range(1, n + 1):
            if not st[i] and (t == -1 or dist[t] > dist[i]):
                t = i
        # 放入s
        st[t] = True
        # 更新节点
        for i in range(1, n + 1):
            dist[i] = min(dist[i], dist[t] + g[t][i])
    return -1 if dist[n] > 10000 else dist[n]

print(dijkstra())

二、850. Dijkstra求最短路 II - AcWing题库

python 复制代码
# 堆优化版
import heapq
# 稀疏图用邻接表
N = int(2e5)
# 头节点初始化为-1、值为最大值
h = [-1] * N; e = [0] * N; ne = [0] * N; val = [0] * N; idx = 0
st = [False] * N
dist = [float('inf') for _ in range(N)]     # 初始化成无穷大
q = []  # 堆

def add(x, y, z):
    global idx
    e[idx] = y
    val[idx] = z
    ne[idx] = h[x]
    h[x] = idx
    idx += 1

R = lambda: map(int, input().split())
n, m = R()
for _ in range(m):
    x, y, z = R()
    add(x, y, z)
  
def dijkstra():
    dist[1] = 0
    heapq.heappush(q, (0, 1))
    while q:
        # 寻找
        distance, ver = heapq.heappop(q)
        if st[ver]: continue
        # 放入s
        st[ver] = True
        # 更新其他节点
        cur = h[ver]
        while cur != -1:
            j = e[cur]
            if dist[j] > distance + val[cur]:
                dist[j] = distance + val[cur]
                heapq.heappush(q, (dist[j], j))     # 更新时,冗余存储
            cur = ne[cur]
    return dist[n]
ans = dijkstra()
print(-1 if ans > int(1e9) else ans)

感谢你看到这里一起!加油吧!

相关推荐
不二狗1 小时前
每日算法 -【Swift 算法】电话号码字母组合
开发语言·算法·swift
AL流云。1 小时前
【优选算法】分治
数据结构·算法·leetcode·排序算法
沉到海底去吧Go2 小时前
【PDF识别改名】PDF指定区域OCR识别重命名工具使用教程和注意事项
python·pdf·ocr
面朝大海,春不暖,花不开2 小时前
管理数据洪流:自动化处理与归档每日数据文件的策略与实践
运维·python·自动化
YYXZZ。。3 小时前
PyTorch——搭建小实战和Sequential的使用(7)
人工智能·pytorch·python
四川兔兔3 小时前
pytorch 与 张量的处理
人工智能·pytorch·python
moxiaoran57536 小时前
uni-app学习笔记二十九--数据缓存
笔记·学习·uni-app
AI蜗牛之家6 小时前
Qwen系列之Qwen3解读:最强开源模型的细节拆解
人工智能·python
C++ 老炮儿的技术栈6 小时前
UDP 与 TCP 的区别是什么?
开发语言·c++·windows·算法·visual studio
殇者知忧6 小时前
【论文笔记】若干矿井粉尘检测算法概述
深度学习·神经网络·算法·随机森林·机器学习·支持向量机·计算机视觉