思想:
G是一棵树的条件:(1)G是无回路的连通图 (2)或有n-1条边的连通图
此算法(采用后者判断):
对连通的判定:能否一次遍历全部顶点
对边数的判定:使用深度优先搜索,在遍历图的过程中统计可能访问到的顶点个数和边的条数
void DFS(ALGraph &G,int v,int &Vnum,int &Enum,bool visited[]){//使用深度优先搜索,统计访问到的顶点个数和边的条数(关键)
Vnum++;visited[v]=true;
for(int w=FirstNeighbor(G,v);w>=0;w=NextNeighbor(G,v,w))
if(!visited[w]){
Enum++;
DFS(G,w,Vnum,Enum,visited);
}
}
bool isTree(ALGraph &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==G.vexnum-1)
return true;
else
return false;
}