- #include <iostream>
- const int MAX=2000;
- const int INF=10;
- using namespace std;
- char map[MAX][8];
- int matrix[MAX][MAX];
- int cmp(char *a,char *b)
- {
- int cnt=0;
- for(int i=0;i<7;i++)
- if(a[i]!=b[i])
- cnt++;
- return cnt;
- }
- void prim(int N,int u)
- {
- int i,j,k;
- int min;
- int mincost=0;
- int lowcost[MAX];
- for(i=0;i<N;i++)
- lowcost[i]=matrix[u][i];
- for(i=1;i<N;i++)
- {
- min=INF;
- for(j=0;j<N;j++)
- if(lowcost[j] && lowcost[j]<min)
- {
- min=lowcost[j];
- k=j;
- }
- mincost+=min;
- lowcost[k]=0;
- for(j=0;j<N;j++)
- if(lowcost[j] && lowcost[j]>matrix[k][j])
- lowcost[j]=matrix[k][j];
- }
- printf("The highest possible quality is 1/%d./n",mincost);
- }
- int main()
- {
- int N;
- int i,j;
- while(cin >> N && N!=0)
- {
- for(i=0;i<N;i++)
- {
- cin >> map[i];
- map[i][8]='/0';
- }
- for(i=0;i<N;i++)
- for(j=i+1;j<N;j++)
- matrix[j][i]=matrix[i][j]=cmp(map[i],map[j]);
- prim(N,0);
- }
- return 0;
- }
pku 1789
最新推荐文章于 2019-01-08 01:48:28 发布