zoukankan      html  css  js  c++  java
  • Prim算法

    最小生成树

    3条构造最小生成树的准则:

    1. 只能使用该网络中的边来构造最小生成树
    2. 只能使用恰好n-1条边来联结网络中的n个结点
    3. 选用的这个n-1条边不能构成回路。

    MST性质

    假设N=(V,{E})是一个连通网,U是顶点集合V的一个非空子集。若(u,v)是一条具有最小值(代价)的边,其中u属于U,v属于V-U(即U对立集合),那么必存在一颗包含边(u,v)的最小生成树。

    注意prim和kruskal算法都是利用MST性质

    如何利用MST性质来构造最小生成树?

    我们知道权值最小的肯定在最小生成树中,权值次小的边也会被至少一颗生成树采用,关键第三小的边选择(由于第三条边可能出现回路,从而不满足树的定义)。由此我们可以使用不同策略来解决回路问题常见的算法有Prim算法和kruskal算法。(都用了贪心策略

    Prim算法

    解决上述的关键点思想是:将定点集合分成两个U,V-U(初始状态U中只有一个Uo),再加上一个TE集合来表示最小生成树边的集合。

    void Prim(MGraph g,int v,int &sum)
     1 /*
    2 *LowCost[i]:当前生成树(U集合)到顶点i的多条边中最短的一条边。
    3 *VexSet[i]:顶点i不在生成树中。1表示在里面,0反之。
    4 *MGraph用的邻接矩阵表示,其中用edges[i][j]来记录i-->j是否有关系。n表示顶点个数,e表示边的个数。
    5 */
    6 void Prim(MGraph g,int v,int &sum)
    7 {
    8 int LowCost[Max],VexSet[Max],v;
    9 int i,j,k,min;
    10
    11 //初始化LowCost,VexSet数组
    12 for(i=0;i<g.n;i++)
    13 ​ {
    14 ​ ​ LowCost[i]=g.edges[v][i];
    15 ​ ​ VexSet[i]=0;
    16 ​ }​
    17
    18 ​ ​ VexSet[v]=1;
    19 ​ ​ sum=0;
    20 /*------------------------------------------------我是分割线---------------------------------------------------------*/
    21 for(i=0;i<g.n;i++)
    22 {
    23 min = INF;//表示无穷或者大于所有的权值就行
    24
    25 //找出LowCost的最短代价(权值)即找出最短边中的最短的一条。​
    26 for(j=0;j<g.n;j++)
    27 {
    28 if(VexSet[j]==0&&LowCost[j]<min)
    29 {
    30 min = LowCost[j];
    31 k=j;
    32 }
    33 }
    34
    35 //将该条边加入生成树中
    36 VexSet[k]=1;
    37 v=k;
    38 sum+=min;//这个可以根据需要调整,这里做的是计算min的和。
    39
    40 //加入一个顶点v之后,生成树到各个不在生成树的顶点的最小值也会变。
    41 //即更新LowCost数组(只计算不在生成树的顶点且只要更新与新添进去的顶点相关的边)。
    42 for(j=0;j<g.n;j++)
    43 {
    44 if(VexSet[j]==0&&g.edges[v][j]<LowCost[j])
    45 {
    46 LowCost[j]=g.edges[v][j];
    47 }
    48 }
    49
    50 }
    51 }



  • 相关阅读:
    [转]ThinkCMF框架任意内容包含漏洞分析复现
    nodejs环境安装
    ffmpeg+nginx-rtmp-module
    activemq安装
    mysql审计插件
    sql优化工具SQLAdvisor的安装
    Harbor安装(docker-compose) -- 企业级Registry仓库
    在CentOS上部署kubernetes1.9.0集群
    3-基础概念(数据模型、时序 4 种类型、作业和实例)
    1-什么是 Prometheus
  • 原文地址:https://www.cnblogs.com/hankskfc/p/2193559.html
Copyright © 2011-2022 走看看