码迷,mamicode.com
首页 > Web开发 > 详细

[2016-04-14][POJ][1287][Networking]

时间:2016-04-14 15:56:19      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:

  • 时间:2016-04-14 14:48:44 星期四

  • 题目编号:[2016-04-14][POJ][1287][Networking]

  • 题目大意:求最小生成树

  • 分析:直接prim算法,更新边的时候,重边取最小值

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5. const int maxn = 50 + 10;
  6. const int inf = 0x3f3f3f3f;
  7. int g[maxn][maxn],vis[maxn],lowc[maxn];
  8. int prim(int n){
  9. int ans = 0;
  10. memset(vis,0,sizeof(vis));
  11. for(int i = 2 ; i <= n ; ++i) lowc[i] = g[1][i];
  12. vis[1] = 1;
  13. for(int i = 2 ; i <= n ;++i){
  14. int minc = inf;
  15. int p = -1;
  16. for(int j = 1 ;j <= n ;++j){
  17. if(!vis[j] && minc > lowc[j]){
  18. minc = lowc[j];
  19. p = j;
  20. }
  21. }
  22. if(minc == inf) return -1;
  23. ans += minc;
  24. vis[p] = 1;
  25. for(int j = 1 ; j <= n ; ++j){
  26. if(!vis[j] && lowc[j] > g[p][j])
  27. lowc[j] = g[p][j];
  28. }
  29. }
  30. return ans;
  31. }
  32. int main(){
  33. //freopen("in.txt","r",stdin);
  34. int n,m;
  35. while(~scanf("%d",&n) && n){
  36. scanf("%d",&m);
  37. int a,b,c;
  38. memset(g,0x3f,sizeof(g));
  39. for(int i = 1; i <= m ; ++i ){
  40. scanf("%d%d%d",&a,&b,&c);
  41. g[a][b] = min(c,g[a][b]);
  42. g[b][a] = g[a][b];
  43. }
  44. printf("%d\n",prim(n));
  45. }
  46. return 0;
  47. }




[2016-04-14][POJ][1287][Networking]

标签:

原文地址:http://www.cnblogs.com/qhy285571052/p/d8ca87e1ec8128be30c4bc0a9c35d3d2.html

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