连通分量
任何连通图的连通分量只有一个,即是其自身,非连通的无向图有多个连通分量。
比如:
图(a)的连通分量只有一个,而图(b)的连通分量有6个。
现在有数据如下,怎么判断有多少个连通分量?
int e[10][2] = {
{ 4, 3 }, //两个节点之间相互连接
{ 3, 8 },
{ 6, 5 },
{ 9, 4 },
{ 2, 1 },
{ 8, 9 },
{ 5, 0 },
{ 7, 2 },
{ 6, 1 },
{ 1, 0 },
};
我们主要有两种算法:quick-find算法和quick-union算法
代码实现
ADT
#include <stdio.h>
#include <malloc.h>
#include <memory.h>
#include <assert.h>
#define MAXVEX 100
#define MAXNUM 10
#define BOOLEAN int
#define VTYPE int
#define TRUE 1
#define FALSE 0
typedef struct UF
{
int count; //连通分量数量
VTYPE id[MAXNUM]; //连通分量ID
int(*countUF)(struct UF *);
BOOLEAN(*connectedUF)(struct UF *, VTYPE, VTYPE);
int(*findUF)(struct UF *, VTYPE);
void(*unionUF)(struct UF *, VTYPE, VTYPE);
} UF, *UFPtr;
int countUF(UFPtr this);
BOOLEA