zoukankan      html  css  js  c++  java
  • HDU 1233 还是畅通工程

    解题报告:有N个村庄,要在这N个村庄之间修路,要求修好路之后所有的村庄都能连通,输入一共有N*(N-1)/2个,即已知每一对村庄之间的距离。

    此题个人觉得用普莱姆算法比较好,因为已知每两个村庄之间的距离,同时也是因为一开始用克鲁斯卡尔交了n遍都没过,改用普莱姆一次就过了。

     1 #include<cstdio>
     2 #include<cstring>
     3 int map[105][105],visit[105];
     4 const int MAX = 0xffffff;
     5 int main() {
     6     int N,M,x,y,z;
     7     while(scanf("%d",&N)&&N) {
     8         M = N*(N-1)/2;
     9         for(int i = 1;i<=M;++i) {
    10             if(i<=N)
    11             map[i][i] = MAX;
    12             scanf("%d%d%d",&x,&y,&z);
    13             map[x][y] = map[y][x] = z;
    14         }
    15         memset(visit,0,sizeof(visit));
    16         int tot = 0;
    17         visit[1] = 1;
    18         for(int i = 1;i<N;++i) {
    19             int Min = MAX,l1,l2;
    20             for(int j = 1;j<=N;++j)
    21             if(!visit[j]) {
    22                 for(int k = 1;k<=N;++k)
    23                 if(visit[k]&&map[j][k]<Min) {
    24                     Min = map[j][k];
    25                     l1 = j;
    26                     l2 = k;
    27                 }
    28             }
    29             tot += Min;
    30             visit[l1] = visit[l2] = 1;
    31         }
    32         printf("%d
    ",tot);
    33     }
    34     return 0;
    35 }
    View Code
  • 相关阅读:
    12.20个人任务总结
    典型用户和用户场景描述
    12.19冲刺总结
    12月18日任务总结
    构建之法阅读笔记02
    构建之法阅读笔记03
    构建之法阅读笔记01
    软件工程个人作业01
    内容提供者
    Pull解析Xml
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3196272.html
Copyright © 2011-2022 走看看