prim算法

题目:点击打开链接

这个题目感觉很好啊,首先是题意,题意就是很难理解,真是英语不好啊,对于英语还得多加努力啊,另外这个题目也是数据处理问题,我的数据处理能力也是比较弱的,下面的代码对于这个·题目的数据处理诠释的很好。

代码:

#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是无向图,,,)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值