2024.7.7刷题记录

目录

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

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


根据讲解视频写的代码

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

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题库

# 堆优化版
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. 记录(20240605)

    2024-07-11 23:46:03       29 阅读
  2. 2024年记录

    2024-07-11 23:46:03       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 23:46:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 23:46:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 23:46:03       58 阅读
  4. Python语言-面向对象

    2024-07-11 23:46:03       69 阅读

热门阅读

  1. Vue3 + Vite项目使用SVG图片

    2024-07-11 23:46:03       19 阅读
  2. 代码随想录-DAY⑤-哈希表——leetcode 242 | 349 | 202

    2024-07-11 23:46:03       22 阅读
  3. Python爬虫-requests模块

    2024-07-11 23:46:03       25 阅读
  4. AIGC各个应用场景下的模型选择

    2024-07-11 23:46:03       24 阅读
  5. 在Linux中使用Typora将Markdown文档导出为docx格式

    2024-07-11 23:46:03       19 阅读
  6. 编程语言与数据结构的关系:深度解析与探索

    2024-07-11 23:46:03       21 阅读
  7. 华为OD机考题(HJ108 求最小公倍数)

    2024-07-11 23:46:03       18 阅读