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;}