判断无向图是否是一棵树

算法思想:

        G必须是无回路的连通图或者是n-1条边的连通图,这里采用后者作为判断条件。采用深度优先搜索算法遍历途中可能访问到的顶点个数和边数,如果一次遍历能访问到n个顶点和n-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);
    }
}


你可能感兴趣的:(数据结构(c))