一个无向图是一棵树的条件是:G必须是无回路的连通图或者有n-1条边的连通图。
对连通的判定:用能否全部遍历所有顶点来实现。
本算法中采用深度优先搜索算法在遍历图的过程中统计可能访问到的顶点个数和边的条数。若一次就遍历访问到N个顶点和n-1条边。则为一棵树。
bool isTree(Graph &G){
for(i=1;i<G.vexnum;i++) visited[i]=FALSE;
int vNum=0,eNum=0;
DFS(G,1,vNum,eNum,visited);
if(vNum == G.vexnum && eNum == 2*(G.vexnum-1))//符合条件
return TRUE;
else
return FALSE;
}
void DFS(Graph &G,int v,int &vNum,int &eNum,int visited[]){
visited[v]=TRUE;
vNum++;
int w=FirstNeighbor(G,v);
while(w!=-1){//当邻接顶点存在
eNum++;//边存在,边计数
if(!visited[w]){//当前结点未访问过
DFS(G,w,vNum,eNum,visited);
}
w=NextNeighbor(G,v,w);
}
}
转载自https://blog.csdn.net/u012133341/article/details/119640653?utm_source=app&app_version=5.2.0