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

[2016-04-14][POJ][1258][Agri-Net]

时间:2016-04-14 20:47:45      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

  • 时间:2016-04-14 20:36:55 星期四

  • 题目编号:[2016-04-14][POJ][1258][Agri-Net]

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

  • 分析:直接prim算法

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




[2016-04-14][POJ][1258][Agri-Net]

标签:

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

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