poj 1789

来源:互联网 发布:怎么设置域名跳转 编辑:程序博客网 时间:2024/05/18 22:40

这道题目一定要理解题意,题目大意是:历史上,曾用7个小写字母来表示每种truck的型号,每两种型号之间的差距为字母串中不同字母的个数代码如下:#include <iostream>#include <cstdio>#include <cstring>#include <string>using namespace std;const int maxn=2005;const int inf=0x3f3f3f3f;int map[maxn][maxn];int dist[maxn];bool p[maxn];string s[maxn];int n;int k2;void init(){    int i,j;    for(i=1; i<=n; i++)    {        for(j=1; j<=n; j++)        {           map[i][j]=inf;        }    }}void  prime(){    k2=0;    int i,j,pos;    for(i=0; i<n; i++)    {        p[i]=false;        dist[i]=map[0][i];    }    p[0]=true;    dist[0]=0;    for(i=1; i<n; i++)    {        int min=inf;        for(j=0; j<n; j++)        {            if(!p[j]&&dist[j]<min)            {                min=dist[j];                pos=j;            }        }        p[pos]=true;        k2+=min;        for(j=0; j<n; j++)        {            if(!p[j]&&dist[j]>map[pos][j])            {                dist[j]=map[pos][j];            }        }    }}int main(){    int i,j,k;    while(scanf("%d",&n),n)    {        for(i=0; i<n; i++)          cin>>s[i];        for(i=0; i<n; i++)        {            for(j=i+1; j<n; j++)            {                int sum=0;                for(k=0; k<7; k++)                {                    if(s[i][k]!=s[j][k])                    {                        sum++;                    }                }                map[i][j]=map[j][i]=sum;            }        }        prime();        cout<<"The highest possible quality is 1/"<<k2<<"."<<endl;    }    return 0;}