判断一个图是否连通

判断一个图是否连通

从图中的任意一个顶点开始进行深度优先遍历搜索,如图中所有点都可以遍历到,即只有一个连通分量,则说明这个图连通
图的定义及基本操作请参考: 邻接表表示图(有向、无向图)及广度、深度遍历).

bool visited[MaxVertexNum];         //访问标记数组

//从顶点v出发,采用递归,深度遍历图G
void DFS(ALGraph G, int v)
{
    visit(G, v);                    //访问v
    visited[v]=true;                //设已访问标记
    for(int w=FirstNeighbor(G, v); w>=0; w=NextNeighbor(G, v, w))
    {                               //w为v的尚未访问的邻接顶点
        if(!visited[w])
        {
            DFS(G, w);
        }
    }
}

//判断一个图是否连通
bool Judge(ALGraph G)
{
    for(int v=0; v<G.vexnum; v++)
    {
        visited[v]=false;
    }
    DFS(G, 0);                      //从任意一点遍历,这里从下标为0的点开始
    for(int v=0; v<G.vexnum; v++)
    {
        if(!visited[v])
        {
            return false;
        }
    }
    return true;
}

猜你喜欢

转载自blog.csdn.net/qq_36784975/article/details/84404258