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