跳转至

07 - 图遍历与最短路

1. 图遍历

  • BFS :无权图最短步数
  • DFS :连通性、环检测、回溯路径

2. BFS 模板

Python
from collections import deque

def bfs(start, graph):
    q = deque([start])
    dist = {start: 0}
    while q:
        u = q.popleft()
        for v in graph[u]:
            if v not in dist:
                dist[v] = dist[u] + 1
                q.append(v)
    return dist

3. Dijkstra 模板

Python
import heapq

def dijkstra(n, edges, s):
    g = [[] for _ in range(n)]
    for u, v, w in edges:
        g[u].append((v, w))
    INF = 10**18
    dist = [INF] * n
    dist[s] = 0
    pq = [(0, s)]
    while pq:
        d, u = heapq.heappop(pq)
        if d != dist[u]:
            continue
        for v, w in g[u]:
            nd = d + w
            if nd < dist[v]:
                dist[v] = nd
                heapq.heappush(pq, (nd, v))
    return dist

4. 复杂度要求

  • BFS/DFS :O(n + m)
  • Dijkstra (堆优化):O((n + m) log n)

5. 训练清单

  • 岛屿数量
  • 课程表(拓扑)
  • 网络延迟时间
  • 最短路径计数