#include <iostream>
using namespace std;
#define MAX 2000
int M[MAX][MAX];
#define INFINITY 100
int distance(char *A,char *B,int n)
{
int d=0;
for(int i=0;i<n;i++)
if( A[i] != B[i]) ++d;
return d;
}
int get_min(int *D,int n,char *CLOSE)
{
int min=INFINITY;
int minv=-1;
for(int i=0;i<n;i++)
{
if(CLOSE[i])
continue;
if(D[i]<min)
{
min=D[i];
minv=i;
}
}
return minv;
}
void deal(int n)
{
char C[MAX][7];
char CLOSE[MAX];
int D[MAX];
int sv=0;
int treeSize,treeSum;
treeSize=0;
treeSum=0;
memset(M,0,MAX*MAX*sizeof(int));
memset(CLOSE,0,MAX);
for(int i=0;i<n;i++)
cin>>C[i];
for(int i=0;i<n;i++)
{
D[i] = INFINITY;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i == j)
M[i][j] =0;
else
M[i][j] = distance(C[i],C[j],7);
//cout<<"M["<<i<<"]["<<j<<"]="<<M[i][j]<<endl;
}
}
D[sv]=0;
//prim
while(treeSize != n)
{
int now_v = get_min(D,n,CLOSE);
if(now_v == -1)
// cout<<"now_v is -1,tresSize"<<treeSize<<endl;
return ;
CLOSE[now_v]=1;
++treeSize;
treeSum += D[now_v];
//cout<<"now_v"<<now_v<<"D[now_v]"<<D[now_v]<<endl;
for(int j=0;j<n;j++)
{
if(now_v != j && !CLOSE[j])
{
if( M[now_v][j] < D[j])
D[j] = M[now_v][j];
}
}
}
cout<<"The highest possible quality is 1/"<<treeSum<<"."<<endl;;
}
int main()
{
int n;
while(cin>>n)
{
if(n == 0)
break;
deal(n);
}
}
in.dat
4
aaaaaaa
baaaaaa
abaaaaa
aabaaaa
0
阅读(19) | 评论(0) | 转发(0) |
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
using namespace std;
#define MAX 2000
int M[MAX][MAX];
#define INFINITY 100
int distance(char *A,char *B,int n)
{
int d=0;
for(int i=0;i<n;i++)
if( A[i] != B[i]) ++d;
return d;
}
int get_min(int *D,int n,char *CLOSE)
{
int min=INFINITY;
int minv=-1;
for(int i=0;i<n;i++)
{
if(CLOSE[i])
continue;
if(D[i]<min)
{
min=D[i];
minv=i;
}
}
return minv;
}
void deal(int n)
{
char C[MAX][7];
char CLOSE[MAX];
int D[MAX];
int sv=0;
int treeSize,treeSum;
treeSize=0;
treeSum=0;
memset(M,0,MAX*MAX*sizeof(int));
memset(CLOSE,0,MAX);
for(int i=0;i<n;i++)
cin>>C[i];
for(int i=0;i<n;i++)
{
D[i] = INFINITY;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i == j)
M[i][j] =0;
else
M[i][j] = distance(C[i],C[j],7);
//cout<<"M["<<i<<"]["<<j<<"]="<<M[i][j]<<endl;
}
}
D[sv]=0;
//prim
while(treeSize != n)
{
int now_v = get_min(D,n,CLOSE);
if(now_v == -1)
// cout<<"now_v is -1,tresSize"<<treeSize<<endl;
return ;
CLOSE[now_v]=1;
++treeSize;
treeSum += D[now_v];
//cout<<"now_v"<<now_v<<"D[now_v]"<<D[now_v]<<endl;
for(int j=0;j<n;j++)
{
if(now_v != j && !CLOSE[j])
{
if( M[now_v][j] < D[j])
D[j] = M[now_v][j];
}
}
}
cout<<"The highest possible quality is 1/"<<treeSum<<"."<<endl;;
}
int main()
{
int n;
while(cin>>n)
{
if(n == 0)
break;
deal(n);
}
}
in.dat
4
aaaaaaa
baaaaaa
abaaaaa
aabaaaa
0
相关热门文章
给主人留下些什么吧!~~
评论热议