其主要由查找函數和合並函數組成
有兩種不同表現形式的查找函數,一種是遞歸代碼簡單不過比較費時間,一種是while循環代碼相對長不過省時。
模板如下
int findx(int x)
{
int r;
r=x;
while(r!=bin[r])
{
r=bin[r];
}
int k,j;
k=x;
while(k!=r)
{
j=bin[k];
bin[k]=r;
k=j;
}
return r;
}
void merge(int x,int y)
{
int fx,fy;
fx=findx(x);
fy=findx(y);
if(fx!=fy)
{
bin[fx]=fy;
}
}
</pre><pre name="code" class="cpp">int find(int x)
{
if(x!=s[x])
s[x]=find(s[x]);
return s[x];
}
void un(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx!=fy)s[fx]=fy;
}