一个无向图G是一颗树的条件:
G必须是无回路的连通图或者是n-1条边的连通图
思路: 如果能通过一次dfs就能够访问图中所有顶点, 并且访问的边是n-1条则此图是一个棵树
void dfs(ALGraph graph, int v, bool visit[], int &vnum, int &arcnum)
{
visit[v] = true;
vnum++;
for(ArcNode* edge = graph.adjList[v].first; edge != NULL; edge = edge->next)
{
arcnum++;//所有访问过的边
if(!visit[edge->adjvex])
{
dfs(graph, edge->adjvex, visit, vnum, arcnum);
}
}
}
/*
一个无向图G是一颗树的条件:
G必须是无回路的连通图或者是n-1条边的连通图
*/
bool isTree(ALGraph graph)
{
bool visit[MAX_NUM];
memset(visit, 0, sizeof(visit));
int vnum = 0, arcnum = 0;//访问过顶点的个数,边的条数
dfs(graph, 1, visit, vnum, arcnum);
if(vnum == graph.vexnum && arcnum == 2 * (graph.vexnum - 1))
return true;
return false;
}
参考: 王道考研数据结构复习指导