• Truck History(prim)


    http://poj.org/problem?id=1789

    读不懂题再简单也不会做,英语是硬伤到哪都是真理,sad++。

    此题就是一个最小生成树,两点之间的权值是毎两串之间的不同字母数。

     1 #include<stdio.h>
     2 #include<string.h>
     3 const int N=2020;
     4 const int INF=1<<28;
     5 int map[N][N],vis[N],dis[N];
     6 int n,sum;
     7 void prim()
     8 {
     9     int pos;
    10     for (int i = 1; i <= n; i ++)
    11     {
    12         dis[i] = map[1][i];
    13     }
    14     vis[1] = 1;
    15     for (int i = 1; i <= n-1; i ++)
    16     {
    17         int min = INF;
    18         for (int j = 1; j <= n; j ++)
    19         {
    20             if (!vis[j] && dis[j] < min)
    21             {
    22                 min = dis[j];
    23                 pos = j;
    24             }
    25         }
    26         sum += min;
    27         vis[pos] = 1;
    28         for (int j = 1; j <= n; j ++)
    29         {
    30             if (!vis[j] && dis[j] > map[pos][j])
    31                 dis[j] = map[pos][j];
    32         }
    33 
    34     }
    35 }
    36 void init()
    37 {
    38     sum = 0;
    39     for (int i = 0; i <= n; i ++)
    40     {
    41         for (int j = 0; j <= n; j ++)
    42         {
    43             map[i][j]  = INF;
    44         }
    45         map[i][i] = 0;
    46         vis[i] = 0;
    47     }
    48 
    49 }
    50 int main()
    51 {
    52     char str[N][12];
    53     int cnt;
    54     while(~scanf("%d",&n)&&n)
    55     {
    56 
    57         init();
    58         for (int i = 1; i <= n; i ++)
    59         {
    60             scanf("%s",str[i]+1);
    61         }
    62         for (int i = 1; i <= n; i ++)
    63         {
    64             for (int j = i+1; j <= n; j ++)
    65             {
    66                 cnt = 0;
    67                 for (int k = 1; k <= 7; k ++)
    68                 {
    69                     if (str[i][k]!=str[j][k])
    70                         cnt++;
    71                 }
    72                 map[i][j] = cnt;
    73                 map[j][i] = cnt;
    74             }
    75         }
    76         prim();
    77         printf("The highest possible quality is 1/%d.
    ",sum);
    78     }
    79     return 0;
    80 
    81 }
    View Code
  • 相关阅读:
    thinkphp目录解析
    开发规范
    form
    命名空间
    类与对象
    OS知识点汇总
    C++每日一记!
    语言哲学和语言逻辑
    形式语言与自动机
    C#脚本
  • 原文地址:https://www.cnblogs.com/lahblogs/p/3245183.html
Copyright © 2020-2023  润新知