zoukankan      html  css  js  c++  java
  • POJ1789Truck History

    题意 : 说实话,题意我没看懂,后来让人给我讲的样例。。。。。   

    4

    aaaaaaa

    baaaaaa

    abaaaaa

    aabaaaa

    0

    这个样例的话,就是输入n下面n行,每行7个字母,让你依次选两行进行比较,不同的有多少个,所以题目中给的样例,1,2行一个不同的,1,3行一个不同的,1,4行一个不同的,所以距离是3,2,3行两个不同的,2,1行一个不同的,2,4行两个不同的,距离是4,这样找下去,可以构成一个无向图,找最小生成树。

    解题思路 : 其实就是一个转化问题,将给的字符串转化成距离的二维数组再找最小生成树即可

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 using namespace std;
     6 const int inf = 1 << 29 ;
     7 const int maxn = 2015;
     8 int vis[maxn];
     9 int low[maxn];
    10 int dis[maxn][maxn];
    11 char ch[maxn][maxn];
    12 int i,j,k,n;
    13 int sum ;
    14 int prim()
    15 {
    16     int ans = 0, i, j, flag=0, min;
    17     memset(vis,0,sizeof(vis));
    18     for(i = 1; i <= n; i++)
    19     {
    20         low[i] = dis[1][i];
    21     }
    22     //low[1]=0;
    23     //vis[1] = 1;
    24     for(i = 1; i <= n; i++)
    25     {
    26         min = inf;
    27         flag = 0;
    28         for(j = 1; j <= n; j++)
    29         {
    30             if(min > low[j] && !vis[j])
    31             {
    32                 min = low[j];
    33                 flag = j;
    34             }
    35         }
    36         ans += min;
    37         vis[flag] = 1;
    38         for(j = 1; j <= n; j++)
    39         {
    40             if(dis[flag][j] < low[j] && !vis[j])
    41             {
    42                 low[j] = dis[flag][j];
    43             }
    44         }
    45     }
    46     return ans;
    47 }
    48 int main()
    49 {
    50     while(cin>>n&&n)
    51     {
    52         for(i = 1 ; i <= n ; i++)
    53         cin>>ch[i] ;
    54         for(i = 1;  i <= n ; i++)
    55         {
    56             for(j = 1 ; j <= n ; j++)
    57             {
    58                 sum = 0;
    59                 for(k = 0; k < 7 ; k++)
    60                 {
    61                     if(ch[i][k] != ch[j][k])
    62                     sum++;
    63                 }
    64                 dis[i][j] = dis[j][i] = sum;
    65             }
    66         }
    67         cout<<"The highest possible quality is 1/"<<prim()<<"."<<endl;
    68     }
    69     return 0 ;
    70 }
    View Code
  • 相关阅读:
    ssm 在不同的数据库中进行切换(开启事物禁用)
    引入xfire-all.jar后导致sping配置异常
    单点登录cas的最简单使用
    win10下cmd命令不能用
    前端json 两个重要的方法
    maven 工程下第三方jar 包的引入和打包 war
    idea 中main 方法不能运行
    从sqlServer 分页查询谈${}和#{}
    can与could区别
    线程同步与异步区别
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3256962.html
Copyright © 2011-2022 走看看