码迷,mamicode.com
首页 > 其他好文 > 详细

编程算法 - 并查集(disjoint set) 代码(C)

时间:2014-07-21 23:42:53      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:mystra   编程算法   并查集   代码   c   

并查集(disjoint set) 代码(C)


本文地址: http://blog.csdn.net/caroline_wendy


并查集(disjoint set)是一种常用的数据结构.树形结构, 包含查询(find)合并(unite)操作.

时间复杂度O(a(n)), 比O(logn)要快.


代码:

class DisjoinSet {
	static const int MAX_N = 10000;
	int par[MAX_N];
	int rank[MAX_N];
public:
	void init(int n) {
		for (int i=0; i<n; i++) {
			par[i] = i;
			rank[i] = 0;
		}
	}
	int find (int x) {
		if(par[x] == x) {
			return x;
		} else {
			return par[x] = find(par[x]);
		}
	}
	void unite(int x, int y) {
		x = find(x);
		y = find(y);
		if (x == y) return;
		if (rank[x] < rank[y]) {
			par[x] = y;
		} else {
			par[y] = x;
			if (rank[x] == rank[y]) rank[x]++;
		}
	}
	bool same(int x, int y) {
		return find(x) == find(y);
	}
};




bubuko.com,布布扣


编程算法 - 并查集(disjoint set) 代码(C)

标签:mystra   编程算法   并查集   代码   c   

原文地址:http://blog.csdn.net/caroline_wendy/article/details/38025341

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!