1. 程式人生 > >判斷無向圖是否是樹

判斷無向圖是否是樹

數據結構 edge lis ret ems visit cnblogs null light

一個無向圖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;
}

  

參考: 王道考研數據結構復習指導

判斷無向圖是否是樹