您的位置:首页 > 其它

个人模板 prim 最小生成树

2017-07-01 12:31 232 查看
#include<bits/stdc++.h>

using namespace std;

const int Inf = 0x3f3f3f3f;
const int N = 1e4 + 10;
int n, m;
int a

;

int prim(){
int mst
, low
, ans = 0;
mst[1] = 0;
for(int i = 2; i <= n; i++){
low[i] = a[1][i];
mst[i] = 1;
}
for(int i = 2; i <= n; i++){
int minx = Inf, minid;
for(int j = 2; j <= n; j++){
if(low[j] < minx && low[j]){
minid = j;
minx = low[j];
}
}
ans += minx;
low[minid] = 0;
for(int j = 2; j <= n; j++){
if(a[minid][j] < low[j]){
low[j] = a[minid][j];
mst[j] = minid;
}
}
}
return ans;
}

int main(){
while(scanf("%d%d", &n, &m) == 2){
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
a[i][j] = Inf;
}
}
for(int i = 0; i < m; i++){
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
a[u][v] = a[v][u] = w;
}
printf("%d\n", prim());
}
}
/*
6 10
1 2 6
1 3 1
1 4 5
2 3 5
2 5 3
3 4 5
3 5 6
3 6 4
4 6 2
5 6 6
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: