1. 程式人生 > >集合的定義與並查操作

集合的定義與並查操作

turn def 名稱 表示 span code += clas 整數

  集合的定義與並查操作。

 1 #define MAXN 1000                  /* 集合最大元素個數 */
 2 typedef int ElementType;           /* 默認元素可以用非負整數表示 */
 3 typedef int SetName;               /* 默認用根結點的下標作為集合名稱 */
 4 typedef ElementType SetType[MAXN]; /* 假設集合元素下標從0開始 */
 5  
 6 void Union( SetType S, SetName Root1, SetName Root2 )
 7 { /* 這裏默認Root1和Root2是不同集合的根結點 
*/ 8 /* 保證小集合並入大集合 */ 9 if ( S[Root2] < S[Root1] ) { /* 如果集合2比較大 */ 10 S[Root2] += S[Root1]; /* 集合1並入集合2 */ 11 S[Root1] = Root2; 12 } 13 else { /* 如果集合1比較大 */ 14 S[Root1] += S[Root2]; /* 集合2並入集合1 */ 15 S[Root2] = Root1; 16 }
17 } 18 19 SetName Find( SetType S, ElementType X ) 20 { /* 默認集合元素全部初始化為-1 */ 21 if ( S[X] < 0 ) /* 找到集合的根 */ 22 return X; 23 else 24 return S[X] = Find( S, S[X] ); /* 路徑壓縮 */ 25 }

集合的定義與並查操作