1. 程式人生 > >集合的並差操作

集合的並差操作

 

#define MAXN 1000                  /* 集合最大元素個數 */
typedef int ElementType;           /* 預設元素可以用非負整數表示 */
typedef int SetName;               /* 預設用根結點的下標作為集合名稱 */
typedef ElementType SetType[MAXN]; /* 假設集合元素下標從0開始 */
 
void Union( SetType S, SetName Root1, SetName Root2 )
{ /* 這裡預設Root1和Root2是不同集合的根結點 */
    /* 保證小集合併入大集合 */
    if ( S[Root2] < S[Root1] ) { /* 如果集合2比較大 */
        S[Root2] += S[Root1];     /* 集合1併入集合2  */
        S[Root1] = Root2;
    }
    else {                         /* 如果集合1比較大 */
        S[Root1] += S[Root2];     /* 集合2併入集合1  */
        S[Root2] = Root1;
    }
}
 
SetName Find( SetType S, ElementType X )
{ /* 預設集合元素全部初始化為-1 */
    if ( S[X] < 0 ) /* 找到集合的根 */
        return X;
    else
        return S[X] = Find( S, S[X] ); /* 路徑壓縮 */
}