QUICK-UNION
连通图
#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 "quickunion.h"
UF::UF(int N)
{
id = new int [N];
count = N;
length = N;
for(int i = 0;i < N;i++)
id[i] = i;
}
UF::~UF()
{
delete [] id;
}
int UF::UFfind(int p)
{
while (p != id[p]) p = id[p];
return p;
}
bool UF::UFconnected(int p,int q)
{
return (this ->UFfind(p) == this ->UFfind (q) ) ? 1 : 0;
}
void UF::UFunion(int p,int q)
{
int pRoot = this -> UFfind (p);
int qRoot = this ->UFfind (q);
if (pRoot == qRoot) return ;
id[pRoot] = qRoot;
count -- ;
}
int UF::UFcount(void)
{
return count ;
}
int UF::UFlength(void)
{
return length;
}