zoukankan      html  css  js  c++  java
  • 判断无向图是否是树

    一个无向图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;
    }

      

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

  • 相关阅读:
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
  • 原文地址:https://www.cnblogs.com/wt20/p/7464618.html
Copyright © 2011-2022 走看看