跳到内容

元数据卡

  • 前置知识:树(第5章)
  • 预计时间:10 分钟
  • 完成标志:能理解图的两种表示法和遍历

图是什么

树是一条线(每个节点只有一个父节点)。图打破了这个限制——任何节点都可以连接任何节点。

text
社交网络:人 = 节点,好友关系 = 边
地图:城市 = 节点,道路 = 边
网页:页面 = 节点,超链接 = 边

图的表示

python
# 邻接表——最常用
graph = {
    'A': ['B', 'C'],
    'B': ['A', 'D'],
    'C': ['A', 'D'],
    'D': ['B', 'C']
}

# 邻接矩阵——适合稠密图
matrix = [
    [0, 1, 1, 0],  # A
    [1, 0, 0, 1],  # B
    [1, 0, 0, 1],  # C
    [0, 1, 1, 0]   # D
]
表示法空间查边遍历邻居
邻接表O(V+E)O(degree)O(degree)
邻接矩阵O(V²)O(1)O(V)

DFS 与 BFS

python
# 深度优先(栈/递归)
def dfs(graph, node, visited=None):
    if visited is None:
        visited = set()
    visited.add(node)
    print(node)
    for neighbor in graph[node]:
        if neighbor not in visited:
            dfs(graph, neighbor, visited)

# 广度优先(队列)
from collections import deque

def bfs(graph, start):
    visited = {start}
    queue = deque([start])
    while queue:
        node = queue.popleft()
        print(node)
        for neighbor in graph[node]:
            if neighbor not in visited:
                visited.add(neighbor)
                queue.append(neighbor)
遍历数据结构特点应用
DFS栈/递归一路走到黑拓扑排序、连通分量
BFS队列逐层扩散最短路径、层级遍历

旅人笔记

图 = 节点 + 边。邻接表省空间适合稀疏图,邻接矩阵查边快适合稠密图。DFS 深入探索,BFS 逐层扩散。

下一步:图的遍历与搜索

从点到线再到网——用 DFS 和 BFS 解决真实问题。

看图搜索 →

Built with VitePress | Software Systems Atlas