码迷,mamicode.com
首页 > 其他好文 > 详细

判断无向图是否是树

时间:2017-09-01 18:58:47      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:str   ems   一个   bool   dfs   cpp   顶点   node   size   

一个无向图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)
    {
        if(!visit[edge->adjvex])
        {
            arcnum++;
            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 ==  graph.vexnum - 1)
        return true;
    return false;
}

  

参考: 王道考研数据结构复习指导

判断无向图是否是树

标签:str   ems   一个   bool   dfs   cpp   顶点   node   size   

原文地址:http://www.cnblogs.com/wt20/p/7464618.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!