無方向図が木かどうかを判断する
717 ワード
アルゴリズムの考え方:
Gは、無回路の連通図またはn−1辺の連通図である必要があり、ここでは後者を判断条件とする.深さ優先探索アルゴリズムを用いて,途中でアクセス可能な頂点の個数と辺数を遍歴し,n個の頂点とn−1個の辺に1回の遍歴でアクセスできる場合は木である.
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);
}
}