ACM_Prim算法

普里姆算法证明:以任意一个顶点作为树的根(这里以1作为根)更新lowcase数组,找到里面最小值,并且这条边一定是最小生成树里面的边(最小生成树要包括所有的顶点,而想要包括这个顶点,只有这几条边,所以一定选择最小的边连接这个顶点)然后以这条边连接的另一个顶点更新lowcase数组,并把该顶点标记为已在树里面,再把已经在树里的点看成一个整体,再找此时lowcase数组里的的最小值,以此类推,直到所有的顶点都被纳入到树里面

普里姆算法的时间复杂度是O(n2)【两层for循环= =】

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
#define Maxn 110
#define INF 9999999
int maz[Maxn][Maxn],lowcase[Maxn],flag[Maxn];
//maz[i][j]表示i到j的距离,注意无向图和重边!lowcase数组存的是现已在树里的点所能到达的点的最小权值
//flag数组是用来标记某个点是否已经在树里面
int prim(int n)
{
    int i,j,ans = 0,pos,mi;
    memset(flag,0,sizeof(flag));
    for (i = 2; i <= n; ++i)
        lowcase[i] = maz[1][i];//先以1作为根节点,更新lowcase数组
    lowcase[1] = 0;//为了数组里的值全
    flag[1] = 1;//1这个点标记为已在树里面
    for (i = 0; i < 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值