题目
假设图 G 采用邻接表存储,设计一个算法,判断无向图 G 是否连通。若连通
则返回 1;否则返回 0。
分析
采用遍历方式判断无向图 G 是否连通。若用深度优先遍历方法,先给visited[]
数组置初值 0,然后从 0 顶点开始遍历该图。在一次遍历之后,若所有顶点 i 的visited[i]均为 1,则该图是连通的;否则不连通。对应的算法如下。
代码
int Connect (AGraph *G) //判断无向图 G 的连通性
{
int i,flag=1;
for (i=0;i<G->n;i++)
visited[i]=0;
DFS(G,0); //调用 DFS 算法
for (i=0;i<G->n;i++)
if (visited[i]==0)
{
flag=0;
break;
}
return flag;
}
若用广度优先遍历方法,先给 visited[]数组置初值 0,然后从 0 顶点开始遍历该图。在一次遍历之后,若所有顶点 i 的 visited[i]均为 1,则该图是连通的;否则不连通。对应的算法如下。
int Connect1(AGraph *G) //判断无向图 G 的连通性
{
int i,flag=1;
for (i=0;i<G->n;i++)visited[i]=0;BFS(G,0); //调用 BFS 算法
for (i=0;i<G->n;i++)
if (visited[i]==0)
{
flag=0;
break;
}
return flag;
}