集合的並差操作
阿新 • • 發佈:2018-11-22
#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] ); /* 路徑壓縮 */ }