MST——Kruskal

最小生成樹的另一個算法,需要用到sort排序,而且這個sort有點兒繞。而且需要檢測連通的話需要多一些操作。

const int maxn = 110;
const int maxm = 10010;
const int max_int = ~(1<<31);
const int min_int = (1<<31);

int p[maxn];
int u[maxm], v[maxm], w[maxm], r[maxm];
//[0,max_int]

int find(int x){return x == p[x] ? p[x] : p[x] = find(p[x]);}
bool cmp(int x, int y){return w[x] < w[y];}

int kruskal(int n, int m){
	int cnt = 0;
	for(int i = 0; i < n; ++i)p[i] = i;
	for(int i = 0; i < m; ++i)r[i] = i;
	sort(r, r+m, cmp);
	for(int i = 0; i < m; ++i){
		int e = r[i], x = find(u[e]), y = find(v[e]);
		if(x != y){
			cnt += w[e];
			p[x] = y;
		}
	}
	return cnt;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章