/*-------------------------------------------------------------------------
* Project: Union.cpp
* Name: zwp
* Date: 2014/5
*---------------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
const int MAXSIZE = 500;
int uset[MAXSIZE];
void makeSet(int size)
{
for(int i = 0; i < size; ++ i)
{
uset[i] = -1;
}
}
/*
int find(int x)
{
if(uset[x] < 0)
return x;
uset[x] = find(uset[x]);
return uset[x];
}
*/
int find(int x)
{
int p = x, t;
while(uset[p] >= 0)
p = uset[p];
while(x != p)
{
t = uset[x];
uset[x] = p;
x = t;
}
return x;
}
void unionSet(int x, int y)
{
if((x = find(x)) == (y - find(y)))
return;
if(uset[x] < uset[y])
{
uset[x] += uset[y];
uset[y] = x;
}
else
{
uset[y] += uset[x];
uset[x] = y;
}
}
int main(int argc, char* argv[])
{
makeSet(100);
unionSet(4, 5);
unionSet(10, 78);
printf("%d\n", find(4));
printf("%d\n", find(10));
system("pause");
return 0;
}
并查集