[prime模板]
2016-10-21 22:03
375 查看
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> using namespace std; #define INF 0x3f3f3f3f #define MAXN 110 int map[MAXN][MAXN], lowcost[MAXN]; bool visit[MAXN]; int nodenum, sum; void prim() { int temp, k; sum = 0; memset(visit, false, sizeof(visit)); //初始化visit visit[1] = true; for(int i = 1; i <= nodenum; ++i) //初始化lowcost[i] lowcost[i] = map[1][i]; for(int i = 1; i <= nodenum; ++i)//找生成树集合点集相连最小权值的边 { temp = INF; for(int j = 1; j <= nodenum; ++j) if(!visit[j] && temp > lowcost[j]) temp = lowcost[k = j]; if(temp == INF) break; visit[k] = true; //加入最小生成树集合 sum += temp;//记录权值之和 for(int j = 1; j <= nodenum; ++j) //更新lowcost数组 if(!visit[j] && lowcost[j] > map[k][j]) lowcost[j] = map[k][j]; } } int main() { int a, b, cost, edgenum; while(scanf("%d", &nodenum) && nodenum) { memset(map, INF, sizeof(map)); edgenum = nodenum * (nodenum - 1) / 2; for(int i = 1; i <= edgenum; ++i) //输入边的信息 { scanf("%d%d%d", &a, &b, &cost); if(cost < map[a][b]) map[a][b] = map[b][a] = cost; } prim(); printf("%d\n", sum); //最小生成树权值之和 } return 0; }
相关文章推荐
- poj1258 prime最短路模板
- HDU 1016 Prime Ring Problem - DFS模板题
- POJ 1258 Agri-Net 【最小生成树入门题目】【prime模板】
- 生成树模板(Prime + Kruskal)
- prime模板
- prime模板题HDU1875
- PKU2485Prime模板低空飘过
- HDU 2138 How many prime numbers(Miller_Rabin法判断素数 【*模板】 用到了快速幂算法 )
- 最小生成树模板(POJ 1258-prime+HDU 1233 Kruskal为例)
- PKU1258,模板题,prime算法就可以直接套用这个模板
- UVa524 - Prime Ring Problem 枚举排列模板题
- 关于Prime算法的从入门到升天的讲解(带模板)
- POJ 1811 Prime Test 【快速判质+因子分解】【模板】
- poj 1811 Prime Test_Pollard_rho算法模板
- POJ - 1811_Prime Test_miller-rabin模板&&polard_rho模板
- 最小生成树Prime算法(模板)
- poj 2031 Building a Space Station【最小生成树prime】【模板题】
- ccf 最优灌溉(prime模板)
- prime算法(最小生成树模板)
- (Relax 数论 1.5)POJ 1811 Prime Test(MillRabin模板题+Pollard模板题:判定大素数&&合数分解)