程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdoj 1232 暢通工程 [並查集]

hdoj 1232 暢通工程 [並查集]

編輯:C++入門知識

hdoj 1232 暢通工程 [並查集]


策略: 如題。

並查集:並查集是一種樹型的數據結構,用於處理一些不相交集合(Disjoint Sets)的合並及查詢問題。 說白了就是點的合並與查詢。

代碼:

 

#include
#include
int fat[1005];
int f(int n){
	if(fat[n] != n) fat[n] = f(fat[n]);
	else
	return fat[n];
}
int main()
{
	int n, m, i;
	while(scanf(%d, &n), n){
		scanf(%d, &m);
		for(i = 1; i <= n; i ++)
			fat[i] = i;
			int a, b;
		while(m --){
			scanf(%d%d, &a, &b);
			int x = f(a);
			int y = f(b);
			if(x != y){ //如果 a的祖先不等於b的祖先,就讓b的祖先的祖先等於a的祖先,這樣兩個集合就合並成了一個
				fat[y] = x;
			}
		}
		int ans = 0;
		for(i = 1; i <= n; i ++)
			if(fat[i] == i)
			++ans;
		printf(%d
, ans-1);
	}
	return 0;
} 


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved