zoukankan      html  css  js  c++  java
  • Truck History POJ 1789 ZOJ 2158 Prim算法

    就是Prim算法,求最小生成树,把每个汽车编号看成点,两个编号的距离,也就是相同位置不同字符的数目,就看做边,显然,看成无向图,谁生成谁自己想想就行了 ,这里边比较多,用Prim算法。

    代码:

    View Code
     1 #include <cstdio>
     2 #define MAXN 2005
     3 int n;
     4 int lowcost[MAXN];
     5 int edge[MAXN][MAXN];
     6 int dis(char a[],char b[])
     7 {
     8     int s = 0;
     9     for(int i=0; i<7; i++)
    10         if(a[i] != b[i] ) s++;
    11     return s;
    12 }
    13 void Prim()
    14 {
    15     int i,j;
    16     int sum=0;
    17     for(i=0; i<n; i++)
    18         lowcost[i] = edge[0][i];
    19     lowcost[0] = -1;
    20     for(i=1; i<n; i++)
    21     {
    22         int min= 1000000;
    23         int v;
    24         for(j=0; j<n; j++)
    25         {
    26             if(lowcost[j] != -1 && lowcost[j] <min)
    27             {
    28                 v = j;
    29                 min = lowcost[j];
    30             }
    31         }
    32         sum += lowcost[v];
    33         lowcost[v] = -1;
    34         for(j=0; j<n; j++)
    35         {
    36             if(lowcost[j] != -1 && edge[v][j] < lowcost[j])
    37                 lowcost[j] = edge[v][j];
    38         }
    39     }
    40     printf("The highest possible quality is 1/%d.\n",sum);
    41 }
    42 int main()
    43 {
    44 //    freopen("out.cpp","r",stdin);
    45     while(~scanf("%d",&n) && n != 0)
    46     {
    47         int i,j;
    48         char a[MAXN][8];
    49         for(i=0; i<n; i++)
    50             scanf("%s",a[i]);
    51         for(i=0; i<n; i++)
    52         {
    53             for(j =i; j<n; j++)
    54             {
    55                 if(i == j ) edge[i][j] = 0;
    56                 else
    57                 {
    58                     edge[i][j] = dis(a[i],a[j]);
    59                     edge[j][i] = edge[i][j];
    60                 }
    61             }
    62         }
    63         Prim();
    64     }
    65     return 0;
    66 }

    这题很成功地过了。

  • 相关阅读:
    自己遇到的冲突及解决方案
    怎么解决代码冲突及切换分支
    程序员修养
    代码回退
    gitlab两种连接方式:ssh和http配置介绍
    gitlab创建项目及分支
    github,gitlab的区别
    代码托管有什么用
    新手搭建云服务器详细过程
    UNP学习笔记(第十一章 名字与地址转换)
  • 原文地址:https://www.cnblogs.com/allh123/p/2992314.html
Copyright © 2011-2022 走看看