Prim算法

来源:互联网 发布:au视频软件下载 编辑:程序博客网 时间:2024/05/29 13:02

 

 void Prim(MGraph g,int v,int &sum)

  {

       int LowCost[Max],VexSet[Max],v;

       int i,j,k,min;

 

      //初始化LowCost,VexSet数组 

 ​    for(i=0;i

 ​    {

 ​    ​    LowCost[i]=g.edges[v][i];

 ​    ​    VexSet[i]=0;

 ​    }​ 

 

    ​ ​ VexSet[v]=1;

 ​    ​ sum=0;

    

      for(i=0;i

       {

            min INF;//表示无穷或者大于所有的权值就行

 

           //找出LowCost的最短代价(权值)即找出最短边中的最短的一条。​c1    

           for(j=0;j

            {

                 if(VexSet[j]==0&&LowCost[j]

                 {

                      min LowCost[j];

                      k=j;

                 }

            }

    

           //将该条边加入生成树中

            VexSet[k]=1;

            v=k;

            sum+=min;          //这个可以根据需要调整,这里做的是计算min的和。

 

           //加入一个顶点v之后,生成树到各个不在生成树的顶点的最小值也会变。

            //即更新LowCost数组(只计算不在生成树的顶点且只要更新与新添进去的顶点相关的边)。

            for(j=0;j

            {

                 if(VexSet[j]==0&&g.edges[v][j]

                 {

                      LowCost[j]=g.edges[v][j];

                 }

            }

 

       }

  }