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)

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

相关推荐
非凡ghost5 小时前
PowerDirector安卓版(威力导演安卓版)
android·windows·学习·软件需求
怒放吧德德5 小时前
Python3基础:基础实战巩固,从“会用”到“活用”
后端·python
aiguangyuan5 小时前
基于BERT的中文命名实体识别实战解析
人工智能·python·nlp
喵手5 小时前
Python爬虫实战:知识挖掘机 - 知乎问答与专栏文章的深度分页采集系统(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集知乎问答与专栏文章·采集知乎数据·采集知乎数据存储sqlite
铉铉这波能秀5 小时前
LeetCode Hot100数据结构背景知识之元组(Tuple)Python2026新版
数据结构·python·算法·leetcode·元组·tuple
kali-Myon5 小时前
2025春秋杯网络安全联赛冬季赛-day2
python·安全·web安全·ai·php·pwn·ctf
晚霞的不甘5 小时前
Flutter for OpenHarmony 实现计算几何:Graham Scan 凸包算法的可视化演示
人工智能·算法·flutter·架构·开源·音视频
代码游侠5 小时前
C语言核心概念复习——C语言基础阶段
linux·开发语言·c++·学习
㓗冽6 小时前
60题之内难题分析
开发语言·c++·算法
大江东去浪淘尽千古风流人物6 小时前
【VLN】VLN仿真与训练三要素 Dataset,Simulators,Benchmarks(2)
深度学习·算法·机器人·概率论·slam