6-14 Count Connected Components(20 分)
Write a function to count the number of connected components in a given graph.
Format of functions:
int CountConnectedComponents( LGraph Graph );
where LGraph
is defined as the following:
typedef struct AdjVNode *PtrToAdjVNode;
struct AdjVNode{
Vertex AdjV;
PtrToAdjVNode Next;
};
typedef struct Vnode{
PtrToAdjVNode FirstEdge;
} AdjList[MaxVertexNum];
typedef struct GNode *PtrToGNode;
struct GNode{
int Nv;
int Ne;
AdjList G;
};
typedef PtrToGNode LGraph;
The function CountConnectedComponents
is supposed to return the number of connected components in the undirected Graph
.
Sample program of judge:
#include <stdio.h>
#include <stdlib.h>
typedef enum {false, true} bool;
#define MaxVertexNum 10 /* maximum number of vertices */
typedef int Vertex; /* vertices are numbered from 0 to MaxVertexNum-1 */
typedef struct AdjVNode *PtrToAdjVNode;
struct AdjVNode{
Vertex AdjV;
PtrToAdjVNode Next;
};
typedef struct Vnode{
PtrToAdjVNode FirstEdge;
} AdjList[MaxVertexNum];
typedef struct GNode *PtrToGNode;
struct GNode{
int Nv;
int Ne;
AdjList G;
};
typedef PtrToGNode LGraph;
LGraph ReadG(); /* details omitted */
int CountConnectedComponents( LGraph Graph );
int main()
{
LGraph G = ReadG();
printf("%d\n", CountConnectedComponents(G));
return 0;
}
/* Your function will be put here */
Sample Input (for the graph shown in the figure):
8 6
0 7
0 1
2 0
4 1
2 4
3 5
Sample Output:
3
作者: 陈越
单位: 浙江大学
时间限制: 400ms
内存限制: 64MB
代码长度限制: 16KB
无向图,直接用BFS
int CountConnectedComponents(LGraph Graph)
{int Count = 0, Front = 0, Rear = 0;
Vertex Visit[MaxVertexNum] = { 0 };
Vertex Queue[MaxVertexNum] = { 0 };
Vertex V;
for(int i=0;i<Graph->Nv;i++)
if (!Visit[i]) {
Queue[Front] = i;
Visit[i] = 1;
while (Front <= Rear) {
PtrToAdjVNode Ptr = Graph->G[Queue[Front]].FirstEdge;
for (; Ptr != NULL; Ptr = Ptr->Next)
if (!Visit[Ptr->AdjV]) {
Queue[++Rear] = Ptr->AdjV;
Visit[Ptr->AdjV] = 1;
}
Front++;
}
Count++;
Rear=Front;
}
return Count;
}