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. 训练清单¶
- 岛屿数量
- 课程表(拓扑)
- 网络延迟时间
- 最短路径计数