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)

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

相关推荐
charlie1145141913 分钟前
使用 Poetry + VS Code 创建你的第一个 Flask 工程
开发语言·笔记·后端·python·学习·flask·教程
菥菥爱嘻嘻4 分钟前
langchain学习-RAG+prompt+OutPutParse
学习·langchain·prompt
Jing_jing_X5 分钟前
ChatGPT 四种模式:普通对话、推理思考、深度研究、学习模式有什么区别?
人工智能·学习·chatgpt
AA陈超12 分钟前
Lyra项目中的输入系统
c++·笔记·学习·游戏·ue5·lyra
徐子童14 分钟前
数据结构----排序算法
java·数据结构·算法·排序算法·面试题
hansang_IR21 分钟前
【记录】四道双指针
c++·算法·贪心·双指针
Valueyou2422 分钟前
引入基于加权 IoU 的 WiseIoU 回归损失以提升 CT 图像检测鲁棒性
人工智能·python·深度学习·目标检测
_OP_CHEN24 分钟前
算法基础篇:(十二)基础算法之倍增思想:从快速幂到大数据运算优化
大数据·c++·算法·acm·算法竞赛·倍增思想
AA陈超28 分钟前
ASC学习笔记0027:直接设置属性的基础值,而不会影响当前正在生效的任何修饰符(Modifiers)
c++·笔记·学习·ue5·虚幻引擎
熊猫钓鱼>_>31 分钟前
多维度股票量化指标体系详解
python·股票·量化·指标·趋势·macd·估值