题目链接:http://poj.org/problem?id=1789
还是套路。
#include <stdio.h> #include <string.h> #define INF 0x3f3f3f3f int maps[2005][2005]; char str[2005][2005]; int dis[2005]; bool vis[2005]; int n; int Prim() { memset(vis,false,sizeof(vis)); for(int i=1; i<=n; i++) dis[i] = INF; int ans=0; dis[1] = 0; for(int i=1; i<=n; i++) { int tmp = INF,k=0; for(int j=1; j<=n; j++) { if(!vis[j]&&dis[j]<tmp) { tmp = dis[j]; k=j; } } vis[k] = true; ans+=tmp; for(int i=1; i<=n; i++) { if(!vis[i]&&dis[i]>maps[k][i]) dis[i] = maps[k][i]; } } return ans; } int main() { while(scanf("%d",&n),n) { for(int i=0;i<n;i++) scanf("%s",str[i]); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { int dist = 0; for(int k=0;k<7;k++) { if(str[i][k]!=str[j][k]) dist++; } maps[i+1][j+1] = dist; } } printf("The highest possible quality is 1/%d. ",Prim()); } return 0; }