算法思想:
G必须是无回路的连通图或者是n-1条边的连通图,这里采用后者作为判断条件。采用深度优先搜索算法遍历途中可能访问到的顶点个数和边数,如果一次遍历能访问到n个顶点和n-1条边,则是一棵树
bool isTree(Graph &G){
for(i =0; i < G.VexNum; i++)
visited[i] = False;
int Vnum = 0;
int 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);
}
}