用乙個1x3的陣列來儲存每個數的數、其父親、秩。
首先尋找合併的兩個樹的根的根,然後按照秩的大小將兩個樹進行合併。
尋找兩個數的根時,順便壓縮其與根的距離
#include#define max 100
int find(int a[3],int n);
void rootunion(int a[3],int m,int n);
int main()
printf("資料 父親 秩\n");
for(i=0;i<=a[0][0];i++)
printf("合併哪兩個數:");
scanf("%d %d",&m,&n);
rootunion(a,m,n);
printf("資料 父親 秩\n");
for(i=0;i<=a[0][0];i++)
return 0; }
int find(int a[3],int n)
} while(a[i][1]!=0) //尋找n的根
int root=a[i][1];
y=n;
while(a[j][1]!=0) //路徑壓縮
return a[i][1]; //返回根
}void rootunion(int a[3],int m,int n)
} for(q=1;q<=a[0][0];q++) }
if(a[u][2]<=a[v][2]) }
else
}
資料結構 不相交集ADT
若對於每一對元素 a,b a b屬於s,arb或者為true或者為false,則稱在集合s上定義關係r。如果arb是true,那麼我們說a與b有關係。等價關係是滿足下列三個性質的關係r 自反性 對於所有的a屬於s,ara 對稱性 arb當且僅當bra 傳遞性 若arb且brc,則arc 乙個元素a屬...
《資料結構與演算法分析》不相交集
前言 回來到學校,今天又要開始苦逼的工作了,後悔回家玩去了,現在想學習時間又不夠了。就是這麼傻 我的github 不相交集 思想 不相交集是解決等價問題的一種有效的資料結構,之所以稱之為有效是因為,這個資料結構簡單 幾行 乙個簡單陣列就可以搞定 快速 每個操作基本上可以在常數平均時間內搞定 首先我們...
用於不相交集合的資料結構
make set x 建立乙個集合,它的唯一成員 因而為代表 是x。因為各個集合是不相交的,所以x不會出現在別的某個集合中 union x,y 將包含x和y的兩個集合合併。假定操作之前著兩個集合是不相交的。find set x 返回乙個指標,這個指標指向包含x的 唯一 集合的代表。按秩合併 秩表示該...