一幅含有V个结点的图是一棵树的条件:1) 有V-1条边且不含有环;2) 有V-1条边且连通;3) 连通,但删除任意一条边都不连通;4) 无环图,但添加任意一条边都会形成环;5) 任意一对顶点间仅存在一条路径。
图的数据结构表示:
1) 邻接矩阵:使用V*V的矩阵,当顶点v和顶点w之间有边相连时,位置(v, w)处值为true
2) 边的数组:使用Edge类,内含有2个int实例变量
3) 邻接表数组:使用以顶点为索引的列表数组,其中每个元素都是和该顶点相邻的顶点列表,即一个链表。
boolean[] marked;
void dfs(Graph G, int v){
marked[v] = true;
count ++;
for(int w : G.adj(v)) //G.adj为顶点v的所有邻接点
if(!marked[w])
dfs(G,w);
}
dfs可用于查找图中所有的连通分量及个数
for(int s=0; s<G.V();s++){
if(!marked[s]){
dfs(G,s);
count++; //一个新的连通分量
}
}
void dfs(Graph G, int v){
marked[v] = true;
id[v] = count; //每个点所在分量
for(int w : G.adj(v))
if(!marked[w])
dfs(G,w);
}
dfs还可用于解决