跳转至

ch3 图算法

说明:与《数据结构》中重叠的部分并未做笔记。

1. 二分图

【二分图】一个无向图 \(G=(V,E)\) 被称为二分图(二部图),如果其顶点可以被赋予红蓝两色,使得每条边都有一个红色端点和一个蓝色端点。

  • 应用:稳定婚姻问题,机器工序分配问题。

【引理】如果一个图是二分图,那么该图不包含奇数个顶点的环。

【引理】设 \(G\) 为一个连通图,并且令 \(L_0, ..., L_k\) 为由 \(\tt BFS\)\(s\) 为起点产生的层,则以下二者中恰好有一个一定成立:

  • \(G\) 中没有边连接同一层的两个顶点,此时可以把奇数层的点染成红色,偶数层的点染成蓝色,则 \(G\) 是一个二分图。
  • \(G\) 中有一条边连接同一层中的两个顶点,此时 \(G\) 包含一个奇环,因此 \(G\) 不是二分图。

【定理】一个图是二分图,当且仅当该图不包含奇环。

2. 有向图的连通性

【定义】我们称顶点 \(u\)\(v\) 是相互可达的,如果既有从 \(u\)\(v\) 的路径,也有从 \(v\)\(u\) 的路径。

【强连通图】一个图被称为是强连通的,如果每一对顶点都是相互可达的。

【引理】令 \(s\) 为任一顶点,图 \(G\) 是强连通的,当且仅当从 \(s\) 出发,每一个顶点都是可达的。并且从每一个顶点出发,\(s\) 也是可达的。

【强连通图的判定】时间复杂度为 \(\cal{O}(m+n)\)

  1. 任取顶点 \(s\)
  2. \(s\) 出发在 \(G\) 中运行 \(\tt BFS\)
  3. \(s\) 出发在 \(G^{rev}\) 中运行 \(\tt BFS\)
  4. 图是强连通的,当且仅当在两个 \(\tt BFS\) 的运行中,所有的顶点都到达了。