LogoCSP Wiki By Yundou
图论

图论基本概念

本页面概述了图论中的一些概念,这些概念并不全是在 OI 中常见的,对于 OIer 来说,只需掌握本页面中的基础部分即可,如果在学习中碰到了不懂的概念,可以再来查阅。

图论相关定义在不同教材中往往会有所不同,遇到的时候需根据上下文加以判断。

图 (graph) 是一个二元组 G=(V(G),E(G))G=(V(G), E(G))。其中 V(G)V(G) 是非空集,称为 点集 (vertex set),对于 VV 中的每个元素,我们称其为 顶点 (vertex)节点 (node),简称 E(G)E(G)V(G)V(G) 各结点之间边的集合,称为 边集 (edge set)

常用 G=(V,E)G=(V,E) 表示图。

图片描述
如上,这是一个无向图,可以看到这个图有 5个顶点,分别编号为0,1,2,3,4{ 0 , 1 , 2 , 3 , 4 }。同时这个图有 4 条边,例如,在顶点 2 和 顶点 4 之间存在着一条边。

V,EV,E 都是有限集合时,称 GG有限图

VVEE 是无限集合时,称 GG无限图

图有多种,包括 无向图 (undirected graph)有向图 (directed graph)混合图 (mixed graph) 等。

GG 为无向图,则 EE 中的每个元素为一个无序二元组 (u,v)(u, v),称作 无向边 (undirected edge),简称 边 (edge),其中 u,vVu, v \in V。设 e=(u,v)e = (u, v),则 uuvv 称为 ee端点 (endpoint)

GG 为有向图,则 EE 中的每一个元素为一个有序二元组 (u,v)(u, v),有时也写作 uvu \to v,称作 有向边 (directed edge)弧 (arc),在不引起混淆的情况下也可以称作 边 (edge)。设 e=uve = u \to v,则此时 uu 称为 ee起点 (tail)vv 称为 ee终点 (head),起点和终点也称为 ee端点 (endpoint)。并称 uuvv 的直接前驱,vvuu 的直接后继。

图片描述
无向图

为什么起点是 tail,终点是 head?

边通常用箭头表示,而箭头是从「尾」指向「头」的。

GG 为混合图,则 EE 中既有 有向边,又有 无向边

GG 的每条边 ek=(uk,vk)e_k=(u_k,v_k) 都被赋予一个数作为该边的 ,则称 GG赋权图。如果这些权都是正实数,就称 GG正权图

GG 的点数 V(G)\left| V(G) \right| 也被称作图 GG阶 (order)

形象地说,图是由若干点以及连接点与点的边构成的。

相邻

在无向图 G=(V,E)G = (V, E) 中,若点 vv 是边 ee 的一个端点,则称 vvee关联的 (incident)相邻的 (adjacent)。对于两顶点 uuvv,若存在边 (u,v)(u, v),则称 uuvv相邻的 (adjacent)

一个顶点 vVv \in V邻域 (neighborhood) 是所有与之相邻的顶点所构成的集合,记作 N(v)N(v)

一个点集 SS 的邻域是所有与 SS 中至少一个点相邻的点所构成的集合,记作 N(S)N(S),即:

N(S)=vSN(v)N(S) = \bigcup_{v \in S} N(v)

简单图

自环 (loop):对 EE 中的边 e=(u,v)e = (u, v),若 u=vu = v,则 ee 被称作一个自环。

重边 (multiple edge):若 EE 中存在两个完全相同的元素(边)e1,e2e_1, e_2,则它们被称作(一组)重边。

简单图 (simple graph):若一个图中没有自环和重边,它被称为简单图。具有至少两个顶点的简单无向图中一定存在度相同的结点。

如果一张图中有自环或重边,则称它为 多重图 (multigraph)

图片描述
多重图

在无向图中 (u,v)(u, v)(v,u)(v, u) 算一组重边,而在有向图中,uvu \to vvuv \to u 不为重边。

在题目中,如果没有特殊说明,是可以存在自环和重边的,在做题时需特殊考虑。

度数

与一个顶点 vv 关联的边的条数称作该顶点的 度 (degree),记作 d(v)d(v)。特别地,对于边 (v,v)(v, v),则每条这样的边要对 d(v)d(v) 产生 22 的贡献。

对于无向简单图,有 d(v)=N(v)d(v) = \left| N(v) \right|

握手定理(又称图论基本定理):对于任何无向图 G=(V,E)G = (V, E),有 vVd(v)=2E\sum_{v \in V} d(v) = 2 \left| E \right|

推论:在任意图中,度数为奇数的点必然有偶数个。

d(v)=0d(v) = 0,则称 vv孤立点 (isolated vertex)

d(v)=1d(v) = 1,则称 vv叶节点 (leaf vertex)/悬挂点 (pendant vertex)

2d(v)2 \mid d(v),则称 vv偶点 (even vertex)

2d(v)2 \nmid d(v),则称 vv奇点 (odd vertex)。图中奇点的个数是偶数。

d(v)=V1d(v) = \left| V \right| - 1,则称 vv支配点 (universal vertex)

对一张图,所有节点的度数的最小值称为 GG最小度 (minimum degree),记作 δ(G)\delta (G);最大值称为 最大度 (maximum degree),记作 Δ(G)\Delta (G)。即:δ(G)=minvGd(v)\delta (G) = \min_{v \in G} d(v)Δ(G)=maxvGd(v)\Delta (G) = \max_{v \in G} d(v)

在有向图 G=(V,E)G = (V, E) 中,以一个顶点 vv 为起点的边的条数称为该顶点的 出度 (out-degree),记作 d+(v)d^+(v)。以一个顶点 vv 为终点的边的条数称为该节点的 入度 (in-degree),记作 d(v)d^-(v)。显然 d+(v)+d(v)=d(v)d^+(v)+d^-(v)=d(v)

对于任何有向图 G=(V,E)G = (V, E),有:

vVd+(v)=vVd(v)=E\sum_{v \in V} d^+(v) = \sum_{v \in V} d^-(v) = \left| E \right|

若对一张无向图 G=(V,E)G = (V, E),每个顶点的度数都是一个固定的常数 kk,则称 GGkk- 正则图 (kk-regular graph)

如果给定一个序列 a,可以找到一个图 G,以其为度数列,则称 a 是 可图化 的。

如果给定一个序列 a,可以找到一个简单图 G,以其为度数列,则称 a 是 可简单图化 的。

路径

途径 (walk):途径是连接一连串顶点的边的序列,可以为有限或无限长度。形式化地说,一条有限途径 ww 是一个边的序列 e1,e2,,eke_1, e_2, \ldots, e_k,使得存在一个顶点序列 v0,v1,,vkv_0, v_1, \ldots, v_k 满足 ei=(vi1,vi)e_i = (v_{i-1}, v_i),其中 i[1,k]i \in [1, k]。这样的途径可以简写为 v0v1v2vkv_0 \to v_1 \to v_2 \to \cdots \to v_k。通常来说,边的数量 kk 被称作这条途径的 长度(如果边是带权的,长度通常指途径上的边权之和,题目中也可能另有定义)。

迹 (trail):对于一条途径 ww,若 e1,e2,,eke_1, e_2, \ldots, e_k 两两互不相同,则称 ww 是一条迹。

路径 (path)(又称 简单路径 (simple path)):对于一条迹 ww,若其连接的点的序列中点两两不同,则称 ww 是一条路径。

回路 (circuit):对于一条迹 ww,若 v0=vkv_0 = v_k,则称 ww 是一条回路。

环/圈 (cycle)(又称 简单回路/简单环 (simple circuit)):对于一条回路 ww,若 v0=vkv_0 = v_k 是点序列中唯一重复出现的点对,则称 ww 是一个环。

关于路径的定义在不同地方可能有所不同,如,「路径」可能指本文中的「途径」,「环」可能指本文中的「回路」。如果在题目中看到类似的词汇,且没有「简单路径」/「非简单路径」(即本文中的「途径」)等特殊说明,最好询问一下具体指什么。

子图

图片描述
图的子图

对一张图 G=(V,E)G = (V, E),若存在另一张图 H=(V,E)H = (V', E') 满足 VVV' \subseteq VEEE' \subseteq E,则称 HHGG子图 (subgraph),记作 HGH \subseteq G

若对 HGH \subseteq G,满足 u,vV\forall u, v \in V',只要 (u,v)E(u, v) \in E,均有 (u,v)E(u, v) \in E',则称 HHGG导出子图/诱导子图 (induced subgraph)

容易发现,一个图的导出子图仅由子图的点集决定,因此点集为 VV'(VVV' \subseteq V) 的导出子图称为 VV' 导出的子图,记作 G[V]G \left[ V' \right]

HGH \subseteq G 满足 V=VV' = V,则称 HHGG生成子图/支撑子图 (spanning subgraph)

显然,GG 是自身的子图,支撑子图,导出子图;无边图是 GG 的支撑子图。原图 GG 和无边图都是 GG 的平凡子图。

如果一张无向图 GG 的某个生成子图 FFkk- 正则图,则称 FFGG 的一个 kk- 因子 (kk-factor)

如果有向图 G=(V,E)G = (V, E) 的导出子图 H=G[V]H = G \left[ V^\ast \right] 满足 vV,(v,u)E\forall v \in V^\ast, (v, u) \in E,有 uVu \in V^\ast,则称 HHGG 的一个 闭合子图 (closed subgraph)

连通

无向图

对于一张无向图 G=(V,E)G = (V, E),对于 u,vVu, v \in V,若存在一条途径使得 v0=u,vk=vv_0 = u, v_k = v,则称 uuvv连通的 (connected)。由定义,任意一个顶点和自身连通,任意一条边的两个端点连通。

若无向图 G=(V,E)G = (V, E),满足其中任意两个顶点均连通,则称 GG连通图 (connected graph)GG 的这一性质称作 连通性 (connectivity)

HHGG 的一个连通子图,且不存在 FF 满足 HFGH\subsetneq F \subseteq GFF 为连通图,则 HHGG 的一个 连通块/连通分量 (connected component)(极大连通子图)。

有向图

对于一张有向图 G=(V,E)G = (V, E),对于 u,vVu, v \in V,若存在一条途径使得 v0=u,vk=vv_0 = u, v_k = v,则称 uu 可达 vv。由定义,任意一个顶点可达自身,任意一条边的起点可达终点。(无向图中的连通也可以视作双向可达。)

若一张有向图的节点两两互相可达,则称这张图是 强连通的 (strongly connected)

若一张有向图的边替换为无向边后可以得到一张连通图,则称原来这张有向图是 弱连通的 (weakly connected)

与连通分量类似,也有 弱连通分量 (weakly connected component)(极大弱连通子图)和 强连通分量 (strongly connected component)(极大强连通子图)。

相关算法请参见强连通分量。

稀疏图/稠密图

图片描述
稀疏图与稠密图

若一张图的边数远小于其点数的平方,那么它是一张 稀疏图 (sparse graph)

若一张图的边数接近其点数的平方,那么它是一张 稠密图 (dense graph)

这两个概念并没有严格的定义,一般用于讨论时间复杂度为 O(V2)O(|V|^2) 的算法与 O(E)O(|E|) 的算法的效率差异(在稠密图上这两种算法效率相当,而在稀疏图上 O(E)O(|E|) 的算法效率明显更高)。

补图

对于无向简单图 G=(V,E)G = (V, E),它的 补图 (complement graph) 指的是这样的一张图:记作 Gˉ\bar G,满足 V(Gˉ)=V(G)V \left( \bar G \right) = V \left( G \right),且对任意节点对 (u,v)(u, v)(u,v)E(Gˉ)(u, v) \in E \left( \bar G \right) 当且仅当 (u,v)E(G)(u, v) \notin E \left( G \right)

反图

对于有向图 G=(V,E)G = (V, E),它的 反图 (transpose graph) 指的是点集不变,每条边反向得到的图,即:若 GG 的反图为 G=(V,E)G'=(V, E'),则 E={(v,u)(u,v)E}E'=\{(v, u)|(u, v)\in E\}

On this page