1. 程式人生 > 資訊 >TCL 直播稱美的空調“連個風扇都不如”被判詆譭和虛假宣傳,賠 30 萬元

TCL 直播稱美的空調“連個風扇都不如”被判詆譭和虛假宣傳,賠 30 萬元

並查集是一種多叉樹,用於處理一些不相交集合的合併與查詢問題。

初始化

每個結點單獨作為一個集合。

查詢

求元素所在集合的代表元素,即根結點。

合併

將兩個元素所在的集合合併為一個集合。

合併之前,應先判斷兩個元素是否屬於同一集合,用上面的查詢來實現。

實現流程

動態集合中每一個元素由一個物件來表示,設x表示一個物件,並查集的實現需要如下操作:

MAKE(X)

建立一個新的集合,由於各集合是分離的,要求x沒有在其他集合中出現過。

UNION(X,Y)

將包含x和y的動態集合合併為一個新的集合,假定在此操作前這兩個集合是分離的。

所得集合的代表是Sx∪Sy的某個成員。

FIND(X)

返回包含x的集合的代表。

路徑壓縮

將元素的父親指標全部指向根節點。

總結

初始化,

for(i=1;i<=n;i++)father[i]=i;

每個元素屬於單獨的一個集合,以自己作為根結點。

尋找根結點編號並壓縮路徑,

int find(int x){ 
	if(father[x]!=x) 
   father[x]=find(father[x]);
   return father[x];
   }

合併兩個集合,

void unionn(int x,int y){
	x=find(x);
	y=find(y);
	father[y]=x; 
	}

判斷元素是否屬於同一集合,

bool judge(int x,int y){
	x=find(x);
   y=find(y);
   if(x==y)  
		return true;
	else 
		return false;
	}

並非原創,僅是整理,請見諒