HDU - 1233 还是畅通工程 prim算法(裸模板)

本文介绍了一个使用C++实现的最小生成树算法。通过输入顶点数量和边的权重,程序能够找到连接所有顶点的最短路径组合,并输出这个最小生成树的总权重。该算法采用Prim算法思想,通过不断选择最小权重的边来逐步构建生成树。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
很裸的模板题;
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

const int inf=0x3f3f3f3f;
int mmp[110][110],dis[110];
int num;
bool vis[110];

void  prime()
{
    int k,Min,sum=0;
    memset(vis,false,sizeof(vis));

    vis[1]=true;
    for(int i=1;i<=num;i++)
       dis[i]=mmp[1][i];
    for(int i=1;i<=num;i++)
    {
        Min=inf;
        for(int j=1;j<=num;j++)
        {
            if(!vis[j]&&temp>dis[j])
            {
                 temp=dis[j];
                 k=j;
            }
        }
        if(Min==inf) break;
        vis[k]=true;
        sum+=Min;
        for(int j=1;j<=num;j++)
        {
            if(!vis[j]&&dis[j]>mmp[k][j])
                   dis[j]=mmp[k][j];
        }
    }
    printf("%d\n",sum);
}
int main()
{
    int a,b,c,tem,result;
    while(scanf("%d",&num)!=EOF&&num)
    {
        memset(mmp,inf,sizeof(mmp));
        tem=(num*(num-1))/2;
        for(int i=1;i<=tem;i++)
        {
           scanf("%d %d %d",&a,&b,&c);
           mmp[a][b]=mmp[b][a]=c;
        }
      prime();
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值