#include <iostream>
#include <string>
#include <cstring>
#define INF 9999999
using namespace std;
int n,sum;
string s[2005];
short book[2001];
int low[2001];
int e[2001][2001];
void prim()
{
for(int i=1; i<=n; i++)
{
low[i]=e[1][i];
book[i]=0;
}
book[1]=1;
int k;
for(int i=1; i<=n; i++)
{
int min1=999999;
for(int j=1; j<=n; j++)
{
if(low[j]<min1&&!book[j])
{
min1=low[j];
k=j;
}
}
if(min1==999999) break;//要break 否则多了不必要的步骤
sum+=min1;
book[k]=1;
for(int f=1; f<=n; f++)
{
if(!book[f]&&low[f]>e[k][f])
{
low[f]=e[k][f];
}
}
}
}
int main()
{
while(cin>>n)
{
if(n==0) break;
for(int i=1; i<=n; i++)
{
cin>>s[i];
}
sum=0;
for(int i=1; i<=n; i++)
{
for(int k=1; k<=n; k++)
{
int count=0;
for(int j=0; j<s[k].length(); j++)
{
if(s[i][j]!=s[k][j])
{
count++;
}
}
e[i][k]=e[k][i]=count;
}
}
prim();
cout<<"The highest possible quality is 1/"<<sum<<"."<<endl;
}
return 0;
}
一开始觉得怎么找路径的大小,感觉一个个比较很花费时间,事实上就只要暴力就过了。套用模板即可
模板题 Truck History poj1789
最新推荐文章于 2018-06-10 21:04:42 发布