问答题 设计一个算法,求出无向图G的连通分量个数,假设图中顶点标号从0到g.vexnum-1。
【正确答案】采用遍历方式判断无向图G是否连通。这里用DFS,先给visited[]数组置初值0,然后从0到g.vexnum-1对图作深度优先搜索遍历。每次遍历开始,对当前顶点作检查,看其visited数组对应值是否为0,为0则表示是一个新连通分量遍历的开始,n自增1。如此检查完所有的顶点,即可得到连通分量的总数。 由此可以写出如下程序代码: int getnum(graph g) //求图G的连通分量 { int i,n=0; int visited[maxSize]; //maxSize是已经定义的常量 for(i=0;i<g.vexnum; ++i) visited[i]=0; for(i=0;i<g.vexnum; ++i) if(visited[i]==0) { ++n; dfs(g,i,visited); //假设此深度优先搜索函数已经定义,表示对图G,从编号为i的顶点开始,以visited //数组作为访问标记数组,进行深度优先搜索遍历 } return n; }
【答案解析】