思路:一个图连通且只有n-1个边,则是一棵树;
用深度优先搜索的基本方法,从一个顶点出发如果能访问所有的顶点,则是连通的,在深度优先搜索的过程中,记录边的个数(在邻接表中还有有邻接点未访问时,即两个点相连,边+1)
bool visited[Maxsize];
bool isTree(Graph G){
for(int i=0;i<vexnum;i++)//初始化访问标记数组
visited[i]=true;
int Vnum,Enum; //顶点个数和边个数
Vnum=Enum=0;
DFS(G,1,Vnum,Enum);
if(Vnum==Vexnum&&Enum=2*(Vexnum-1))
return true;
else
return false;
}
void DFS(Graph G,int v,int &Vnum,int &Enum){
visited[v]=true;
Vnum++;
int w=FirstNeighbor(G,v);
while(w!=-1){
Enum++;
if(!visited[w])
DFS(G,w,Vnum,Enum);
w=NextNeighbor(G,v,w);
}
}