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)

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

相关推荐
m0_678485451 分钟前
CSS实现浮动图标与文本居中对齐_配合浮动与flex
jvm·数据库·python
YuanDaima20482 分钟前
二分查找基础原理与题目说明
开发语言·数据结构·人工智能·笔记·python·算法
里昆4 分钟前
【电力电子】某模拟量采集器的上位机设置和遇到的问题解决
学习
阿Y加油吧8 分钟前
两道中等 DP 题拆解:打家劫舍 & 完全平方数
算法·leetcode·动态规划
2401_887724509 分钟前
uni-app动画效果实现 uni-app如何使用animation API
jvm·数据库·python
Luca_kill9 分钟前
实战指南:用 Python + NLP 搭建一套轻量级 AI 舆情监控系统
人工智能·python·机器学习·nlp·舆情监控
七颗糖很甜11 分钟前
python实现全国雷达拼图数据的SCIT风暴识别
python·算法·scipy
m0_7488394911 分钟前
mysql如何处理不走索引的OR查询_使用UNION ALL优化重写
jvm·数据库·python
Dxy123931021614 分钟前
将 PyTorch Tensor 转换为 Python 列表
人工智能·pytorch·python
卖报的大地主19 分钟前
TPAMI 2026 | 判别和扩散生成学习融合的礼物:边界细化遥感语义分割
人工智能·笔记·学习