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

    某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。 

    Input测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。 
    当N为0时,输入结束,该用例不被处理。 
    Output对每个测试用例,在1行里输出最小的公路总长度。 
    Sample Input

    3
    1 2 1
    1 3 2
    2 3 4
    4
    1 2 1
    1 3 4
    1 4 1
    2 3 3
    2 4 2
    3 4 5
    0

    Sample Output

    3
    5
    这算法叫啥玩意儿我忘记了  但是是最小生成树的题
     1 #include <iostream>
     2 using namespace std;
     3 #include<string.h>
     4 #include<set>
     5 #include<stdio.h>
     6 #include<math.h>
     7 #include<queue>
     8 #include<map>
     9 #include<algorithm>
    10 #include<cstdio>
    11 #include<cmath>
    12 #include<cstring>
    13 #include <cstdio>
    14 #include <cstdlib>
    15 #include<cstring>
    16 int a[110][110];
    17 int b[110];
    18 int sum;
    19 int t;
    20 void TM()
    21 {
    22     int min1=1e13;
    23     int temp=0;
    24     for(int i=1;i<=t;i++)
    25     {
    26         if(b[i]==1)
    27         {
    28             for(int j=1;j<=t;j++)
    29             {
    30                 if(b[j]==1)
    31                     continue;
    32                 if(a[i][j]<min1)
    33                 {
    34                     min1=a[i][j];
    35                     temp=j;
    36                 }
    37             }
    38         }
    39     }
    40     if(temp==0)
    41         return;
    42     sum+=min1;
    43     b[temp]=1;
    44 }
    45 int main()
    46 {
    47 
    48     int temp;
    49     while(cin>>t)
    50     {
    51         if(t==0)
    52             break;
    53         temp=t*(t-1)/2;
    54         int i,j;
    55         memset(a,0,sizeof(a));
    56         while(temp--)
    57             {
    58                 cin>>i>>j;
    59                 cin>>a[i][j];
    60                 a[j][i]=a[i][j];
    61             }
    62         memset(b,0,sizeof(b));
    63         b[1]=1;
    64         sum=0;
    65         int min1=a[1][2];
    66         temp=2;
    67         for(int i=3;i<=t;i++)
    68         {
    69             if(min1>a[1][i])
    70             {
    71                 temp=i;
    72                 min1=a[1][i];
    73             }
    74         }
    75         b[temp]=1;
    76         sum+=min1;
    77         for(int i=1;i<=t;i++)
    78         {
    79             TM();
    80         }
    81         cout<<sum<<endl;
    82     }
    83     return 0;
    84 }
    View Code
  • 相关阅读:
    IELTS Writing Task 2: 'music' essay
    leetcode 368. 最大整除子集
    820复试算法 快排找第 k 小
    ASP.NET后台生成随机验证码
    Oracle身份证验证方法
    ASP.NET 存储过程导入(oracle)返回导入成功数和导入失败数
    C#执行参数为游标 返回一个记录集的Oracle存储过程
    C#执行带参数的Oracle存储过程
    往ORACLE数据库中插入XML数据
    存储过程 将数据插入到临时表,再根据条件判断 插入到不同的表
  • 原文地址:https://www.cnblogs.com/dulute/p/7295565.html
Copyright © 2011-2022 走看看