图论中的基本概念

发表于 2025-07-10 813 字 5 min read

文章目录
连通图、生成树、度数、二分图等图论基础概念的定义与判定。

1. 连通图(Connected Graph)

定义:

对于一个无向图,如果任意两个点之间都至少有一条路径相连,那么这个图就是连通图。

换句话说:

  • 没有孤立的点,也没有被“割断”的部分。

  • 图中的所有节点都属于同一个整体。

举例:

1 -- 2
|    |
3 -- 4

上面这个图,1、2、3、4任意两点都可以互相到达,所以是连通图。


2. 非连通图(Disconnected Graph)

定义:

如果图中存在某些顶点对之间没有路径相连,那么这个图就叫非连通图。

举例:

1 -- 2      3 -- 4

上图分成了两个“部分”,1、2无法到达3、4,显然不是连通图。


3. 连通分量(Connected Component)

定义:

在一个无向图中,每个极大连通子图称为一个连通分量。

  • “极大”的意思是不能再往里加点了,否则就不是连通的了。

  • 每个分量内部是连通的,不同分量之间没有边相连。

举例:

对于这个图:

1 -- 2      3 -- 4
     |      |
     5      6

有两个连通分量:

  • 第一个连通分量包含 {1,2,5}

  • 第二个连通分量包含 {3,4,6}


4. 极大连通子图(Maximal Connected Subgraph)

定义:

极大连通子图就是“不能再加点了的连通子图”。

  • 即每个连通分量本身就是一个极大连通子图。

理解:

其实连通分量和极大连通子图是同一个东西,只是角度不同——连通分量是全图分解后的单位,极大连通子图是强调“极大性”,不能扩展。


5. 相关扩展概念

a. 强连通图(Strongly Connected Graph, 有向图专用)

  • 只用于有向图。

  • 如果任意两个点 u、v,u能到v,v也能到u,则有向图强连通。

  • 整个有向图强连通,则叫强连通图。

  • 每个极大强连通子图叫强连通分量(SCC)。

b. 弱连通图(Weakly Connected Graph, 有向图专用)

  • 有向图把所有边当成无向边后是连通的,原图叫弱连通。

6. 常见问题

  • 连通分量数怎么求?

    用 BFS 或 DFS,每次遇到未访问过的点就跑一遍(染色、打标记),统计总共几次,就是分量数。

  • 图是连通图的判定?

    从任一点出发BFS/DFS一遍,看有没有没访问到的点。


7. 代码小例子

// 求无向图连通分量数(n个点,edges存边)
vector<int> g[N];
bool vis[N];
void dfs(int u) {
    vis[u] = true;
    for (int v : g[u])
        if (!vis[v]) dfs(v);
}
int cnt = 0;
for (int i = 1; i <= n; ++i)
    if (!vis[i]) {
        dfs(i);
        cnt++; // 发现新分量
    }

8. 总结表格

概念适用范围含义举例
连通图无向图任意两点间有路径见上例(1-2-3-4)
非连通图无向图存在至少一对点间无路径见上例(1-2 与 3-4分开)
连通分量无向图最大连通子图(互不连通){1,2,5} 和 {3,4,6}
极大连通子图无向图不能再加点的连通子图和连通分量等价
强连通图/SCC有向图任意两点互可达见有向图