無方向図が木かどうかを判断する

717 ワード

アルゴリズムの考え方:
Gは、無回路の連通図またはn−1辺の連通図である必要があり、ここでは後者を判断条件とする.深さ優先探索アルゴリズムを用いて,途中でアクセス可能な頂点の個数と辺数を遍歴し,n個の頂点とn−1個の辺に1回の遍歴でアクセスできる場合は木である.
bool isTree(Graph &G){
    for(i =0; i < G.VexNum; i++)
        visited[i] = False;
    int Vnum = 0;
    int Enum = 0;
    DFS(G, 1, Vnum, Enum, visited);
    if(Vnum==G.vexnum&&Enum==2*(G.vexnum-1))
        return True;
    else
        return False;
}

void DFS(Graph &G, int v, int &Vnum, int &Enum, int visited[]){
    visited[v] = True;
    Vnum++;
    int w = FirstNeighbor(G,v);
    while(w!=-1){
        Enum++;
        if(!visited[w])
            DFS(G, w, Vnum, Enum, visited);
        w = NextNeighbor(G, v, W);
    }
}