bool isTree(Graph &G){
for(int 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)){ //无向图,边数应为结点数-1的2倍
return true;
}
else return false;
}
void DFS(Graph &G,int v,int& Vnum,int& Enum,int visted[]){
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);
}
}
本文介绍了一种用于判断给定无向图是否为树的算法。通过深度优先搜索(DFS)遍历所有节点,检查节点数和边数是否符合树的定义,即边数等于节点数减一。此算法首先初始化所有节点为未访问状态,然后从第一个节点开始进行DFS,记录访问过的节点数和遍历过的边数。最后,根据Vnum和Enum的值判断图是否为树。
8718

被折叠的 条评论
为什么被折叠?



