zoukankan      html  css  js  c++  java
  • POJ

    题目链接:http://poj.org/problem?id=1251

    Sample Input
    
    9
    A 2 B 12 I 25
    B 3 C 10 H 40 I 8
    C 2 D 18 G 55
    D 1 E 44
    E 2 F 60 G 38
    F 0
    G 1 H 35
    H 1 I 35
    3
    A 2 B 10 C 40
    B 1 C 20
    0
    Sample Output
    
    216
    30

    分析:最小生成树模板题,注意将字母转化为数字ch-'A'+1,输入时%s%d,或者使用cin避免空格回车造成的影响

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stack>
     6 #include<math.h>
     7 #include<queue>
     8 #include<map>
     9 #include<time.h>
    10 using namespace std;
    11 
    12 #define INF 0x3f3f3f3f
    13 #define N 153000
    14 
    15 int maps[200][200],dist[50],vis[50],n;
    16 
    17 void Init()
    18 {
    19     for(int i=1; i<=26; i++)
    20     {
    21         for(int j=1; j<=26; j++)
    22         {
    23             if(i==j)
    24                 maps[i][j]=0;
    25             else
    26                 maps[i][j]=maps[j][i]=INF;
    27         }
    28 
    29         dist[i]=INF;
    30         vis[i]=0;
    31     }
    32 }
    33 
    34 int prim(int s)
    35 {
    36     int i,j;
    37 
    38     vis[s]=1;
    39     for(i=1;i<=26;i++)
    40         dist[i]=maps[s][i];
    41 
    42     int sum=0;
    43     for(i=1;i<n;i++)
    44     {
    45         int Min=INF,index=-1;
    46         for(j=1;j<=26;j++)
    47         if(!vis[j]&&Min>dist[j])
    48         {
    49             Min=dist[j];
    50             index=j;
    51         }
    52         sum+=Min;
    53         vis[index]=1;
    54 
    55         for(j=1;j<=26;j++)
    56             if(!vis[j]&&dist[j]>maps[index][j])
    57             dist[j]=maps[index][j];
    58 
    59     }
    60     return sum;
    61 }
    62 
    63 int main()
    64 {
    65     int i,j,m,c,h1,h2;
    66     char ch1,ch2;
    67 
    68     while(scanf("%d", &n), n)
    69     {
    70         Init();
    71         for(i=1; i<n; i++)
    72         {
    73             cin>>ch1>>m;
    74             h1=ch1-'A'+1;
    75             for(j=1; j<=m; j++)
    76             {
    77                 cin>>ch2>>c;
    78                 h2=ch2-'A'+1;
    79                 maps[h1][h2]=maps[h2][h1]=c;
    80                 ///printf("%d %d %d
    ", h1,h2,maps[h1][h2]);
    81             }
    82         }
    83 
    84         int ans=prim(1);
    85 
    86         printf("%d
    ", ans);
    87     }
    88     return 0;
    89 }
  • 相关阅读:
    sys模块
    反射
    动态导入模块
    类的静态属性
    多态
    继承
    组合
    linux系统各个子目录的内容
    mysql安装
    Docker 数据卷操作
  • 原文地址:https://www.cnblogs.com/weiyuan/p/5697128.html
Copyright © 2011-2022 走看看