QUICK-FIND
连通图
#ifndef QUICKFIND_H_
#define QUICKFIND_H_
class UF
{
private :
int *id; //分量id
int count; //分量数目
int length;
public:
UF (int N); //以整数初始化n个触点
~UF ();
int UFcount (); //连通分量数目
void UFunion (int p,int q); //p q之间建立连接
bool UFconnected (int p,int q); //若p q之间存在连接
//返回true
int UFfind (int p); //p所在分量标识
int UFlength (void); //
};
#endif
#include <iostream>
#include "quickfind.h"
UF::UF (int N)
{
count = N;
length = N;
id = new int [N];
for(int i = 0;i < N; i++)
id[i] = i;
}
UF::~UF ()
{
delete [] id;
}
int UF::UFcount ()
{
return count;
}
void UF::UFunion (int p,int q)
{
int qid = id[q];
int pid = id[p];
if (qid == pid) return;
for (int i = 0;i < length; i++)
{
if (id[i] == pid)
id[i] = qid;
}
count --;
}