第四章 图(三) - 《算法》读书笔记
第四章 图(三)
4.1.6 连通分量
- 连通是一种等价关系,它能将所有顶点切分为等价类
- 连通分量的API如下:
| public class | CC | |
|---|---|---|
| CC(Graph G) | 预处理构造函数 | |
| boolean | connected(int v, int w) | v和w连通吗 |
| int | count() | 连通分量数 |
| int | id(int v) | v所在的连通分量的标识符(0~count()-1) |
4.1.6.1 实现
- 使用深度优先搜索找出图中的所有连通分量
public class CC{
private boolean[] marked;
private int[] id;
private int count;
public CC(Graph G){
marked = new boolean[G.v()];
id = new int[G.V()];
for(int s = 0; s < G.V(); s++)
if(!marked[s]){
dfs(G, s);
count++;
}
}
private void dfs(Graph G, int v){
marked[v] = true;
id[v] = count;
for(int w: G.adj(v))
if(!marked[w])
dfs(G, w);
}
public boolean connected(int v, int w){
return id[v] == id[w];
}
public int id(int v){
return id[v];
}
public int count(){
return count;
}
}
深度优先搜索的预处理使用的时间和空间与V+E成正比,且可以在常数时间内处理关于图的连通性查询。

浙公网安备 33010602011771号