zoukankan      html  css  js  c++  java
  • POJ 1789 -- Truck History(Prim)

     POJ 1789 -- Truck History

     Prim求分母的最小。即求最小生成树

     1 #include<iostream>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 const int maxn = 2000 + 10;
     6 const int INF = 1000000;
     7 int n;//有几个卡车 
     8 char str[maxn][10];
     9 int d[maxn];//记录编号的数值
    10 int Edge[maxn][maxn];
    11 int dist[maxn];
    12 void prim()
    13 {
    14     int sum=0;
    15     //加入源点
    16      dist[0] = -1;
    17     for(int i=1;i<n;i++)
    18     {
    19         dist[i] = Edge[0][i];
    20     }
    21     
    22     for(int i=1;i<n;i++)//依次加入n-1条边
    23     {
    24         int min = INF,pos;
    25         for(int j=1;j<n;j++)//找出最小的一条 
    26         {
    27             if(min>dist[j] && dist[j]!=-1)
    28             {
    29                 min = dist[j];pos = j;
    30             }
    31         }
    32         //将pos加入
    33          dist[pos] = -1;sum+=min;
    34          //进行路径的更新
    35          for(int k=1;k<n;k++)
    36          {
    37              if(dist[k] > Edge[pos][k])
    38                  dist[k]=Edge[pos][k];
    39           } 
    40      } 
    41      cout<<"The highest possible quality is 1/"<<sum<<"."<<endl;
    42 }
    43 
    44 int main()
    45 {
    46     while(cin>>n && n)
    47     {
    48         for(int i=0;i<n;i++)
    49         {
    50             cin>>str[i];
    51          } 
    52          for(int i=0;i<n;i++)
    53          {
    54              int num=0;
    55              for(int k=0;k<7;k++)
    56                  num += (int)(str[i][k] - 'a');
    57             d[i] = num; 
    58          }
    59          memset(Edge,0,sizeof(Edge));
    60          for(int i=0;i<n;i++)
    61          {
    62              for(int j=i+1;j<n;j++)
    63              {
    64                      int temp = 0;
    65                      for(int k=0;k<7;k++)
    66                      {
    67                          temp += str[i][k]!=str[j][k];
    68                      }
    69                      Edge[i][j] = Edge[j][i] = temp;
    70              }
    71          }
    72          memset(dist,INF,sizeof(dist));
    73          prim();
    74          
    75     }
    76     
    77      
    78     return 0;
    79 }

  • 相关阅读:
    Java-01,计算1-10的阶乘之和
    软件工程研究生面试机试考题-2018
    nginx会话保持之sticky模块
    Dubbo原理简介、与Zookeeper整合利用
    Day41 openstack基础
    krb5-libs这个RPM包删掉了导致ssh无法连接
    day40 数据结构-算法(二)
    进程上下文频繁切换导致load average过高
    day39 算法基础
    应用性能管理工具PinPoint介绍
  • 原文地址:https://www.cnblogs.com/yxh-amysear/p/8592010.html
Copyright © 2011-2022 走看看