题目:点击打开链接
这个题目感觉很好啊,首先是题意,题意就是很难理解,真是英语不好啊,对于英语还得多加努力啊,另外这个题目也是数据处理问题,我的数据处理能力也是比较弱的,下面的代码对于这个·题目的数据处理诠释的很好。
代码:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
char str[2000][8];
int dis[2000][2000];
int lowdis[2000];
int main()
{
int n ;
while ( cin >> n , n )
{
int i , j , k ;
for ( i = 0 ; i < n ; i ++ )
cin >> str [i];
memset(dis,0,sizeof(dis));
//求任意两车之间的距离
for ( i = 0 ; i < n - 1 ; i ++ )
{
for ( j = i+1 ; j < n ; j ++ )
{
for ( k = 0 ; k < 7 ; k ++ )
{
if(str[i][k]!=str[j][k])
dis[i][j]++;
}
dis[j][i]=dis[i][j];
}
}
//初始化集合和颠倒集合的距离
for ( i = 0 ; i < n ; i ++ )
lowdis[i]=dis[0][i];
int ans = 0 ; // 所求的解
for ( i = 0 ; i < n - 1 ; i ++ )
{
int mindis = ( 1 << 20 ) ;
for ( j = 0 ; j < n ; j ++ )
{
if( lowdis[j] && mindis > lowdis[j] )
{
//寻找到集合距离最小的点
mindis = lowdis[j] ;
k = j;
}
}
ans += mindis ;
lowdis[k] = 0 ;
for ( j = 0 ; j < n ; j ++ )
{
//更新各点到集合的距离
if(lowdis[j]>dis[k][j])
lowdis[j]=dis[k][j];
}
}
//输出答案,注意后面还有个‘.’
cout<<"The highest possible quality is 1/"<<ans<<"."<<endl;
}
return 0;
}
这个问题就是一个prim算法例题,但是题意比较难以理解一点,kruscal也是可以做的,(prim是无向图,,,)