# 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;
};

typedef struct Vnode{

typedef struct GNode *PtrToGNode;
struct GNode{
int Nv;
int Ne;
};
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 Vnode{

typedef struct GNode *PtrToGNode;
struct GNode{
int Nv;
int Ne;
};
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


## 源码：

int set[MaxVertexNum];
int find(int x)
{
if(set[x]<0)return x;
else
return set[x]=find(set[x]);
}
void combine(int a,int b)
{
int fa,fb;
fa=find(a);
fb=find(b);
if(fa!=fb)
{
if(set[fa]<=set[fb])
{
set[fa]+=set[fb];
set[fb]=fa;
}
else
{
set[fb]+=set[fa];
set[fa]=fb;
}
}
}
int CountConnectedComponents( LGraph Graph )
{
int i;
for(i=0;i<Graph->Nv;i++)
set[i]=-1;
for(i=0;i<Graph->Nv;i++)
{
while(p)
{
//把i和tunion
combine(i,t);
p=p->Next;
}
}
int count=0;
for(i=0;i<Graph->Nv;i++)
{
if(set[i]<0)count++;
}

return count;
}


©️2019 CSDN 皮肤主题: 黑客帝国 设计师: 上身试试