一、 思路
图满足什么样的条件可以将其称为树呢?
树其实是一种特殊的图。
树的特点就是,有n结点,有n-1条边。
并且联通。
所以,当我们对一个图进行遍历,使用一次深度优先遍历算法(DFS)。
- 如果边数为n-1
- 结点数为n
那么,就说明这个图可以称之为一棵树。
二、代码实现
bool visited[MaxVertexNum];
int vex_num;//全局变量,用来统计一轮深度遍历访问的顶点个数
int arc_num;//全局变量,用来统计一轮深度遍历访问的边数
void DFSTraverse(Graph G){
//初始化访问数组
for (int i = 0; i < G.vexnum; i++){
visited[i] = false;//给所有顶点标记为未访问
}
DFS(G, v);
//检查是否满足树的性质
if (G.vexnum == vex_num && 2*(G.vexnum - 1) == arc_num)
return true;
else
return false;//否则不是树
}
void DFS(Graph &G, int v){
visited[v] = true;
vec_num++;
for (int w = FirstNeighbor(G, v); w>=0; w = NextNeighbor(G, v, w))
arc_num++;
if(visited[w])
DFS(G, w)
}