• prim算法


    普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克发现;并在1957年由美国计算机科学家罗伯特·普里姆独立发现;1959年,艾兹格·迪科斯彻再次发现了该算法。因此,在某些场合,普里姆算法又被称为DJP算法、亚尔尼克算法或普里姆-亚尔尼克算法。

    从单一顶点开始,普里姆算法按照以下步骤逐步扩大树中所含顶点的数目,直到遍及连通图的所有顶点。

    1. 输入:一个加权连通图,其中顶点集合为V,边集合为E;
    2. 初始化:Vnew = {x},其中x为集合V中的任一节点(起始点),Enew = {};
    3. 重复下列操作,直到Vnew = V:
      1. 在集合E中选取权值最小的边(u, v),其中u为集合Vnew中的元素,而v则不是(如果存在有多条满足前述条件即具有相同权值的边,则可任意选取其中之一);
      2. 将v加入集合Vnew中,将(u, v)加入集合Enew中;
    4. 输出:使用集合Vnew和Enew来描述所得到的最小生成树。

    procedure prim(v0:integer);
    var
       lowcost,closest:array[1..maxn] of integer;
       i,j,k,min,ans:integer;
    begin
       for i:=1 to n do
        begin
         lowcost[i]:=cost[v0,i];
         closest[i]:=v0;
       end;
       for i:=1 to n-1 do
         begin
          min:=maxint;
          for j:=1 to n do
             if (lowcost[j]<min) and (lowcost[j]<>0) then
              begin
                min:=lowcost[j];
                k:=j;
             end;
          inc(ans, lowcost[k]);
          lowcost[k]:=0;
          for j:=1 to n do
             if cost[k,j]<lowcost[j] then
              begin
                lowcost[j]:=cost[k,j];
                closest[j]:=k;
             end;
       end;
     writeln(ans);
    end;
    ------------------------------------------------------------------------
            for (int loop=1;loop<=n;loop++)
            {
                mind=OO;
                for (int i=1;i<=n;i++)
                {
                    if (!v[i]&&d[i]<mind)
                    {
                        mind=d[i];
                        t=i;
                    }
                }
                v[t]=true;
                ans+=mind;
                for (int i=1;i<=n;i++)
                {
                    if (a[t][i]<d[i])
                    {
                        d[i]=a[t][i];
                    }
                }
            }


  • 相关阅读:
    结构体中的冒号_转
    随机数产生random
    gdb调试段错误及使用
    gcc选项-g与-rdynamic的异同_转
    linux设备模型_转
    boost 1.57.0安装
    技术的正宗与野路子_转
    (转)Java里的堆(heap)栈(stack)和方法区(method)(精华帖,多读读)
    (转)面试大总结之一:Java搞定面试中的链表题目
    (转)类加载器与双亲委派模型
  • 原文地址:https://www.cnblogs.com/cyendra/p/3038403.html
Copyright © 2020-2023  润新知