码迷,mamicode.com
首页 > 编程语言 > 详细

算法之路1_Prime

时间:2015-09-11 19:09:02      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

Prime算法的3中模板

 

Prime算法的基本思想

1.清空生成树,任取一个顶点加入生成树

2.在那些一个端点在生成树里,另一个端点不在生成树里的边中,选取一条权最小的边,将它和另一个端点加进生成树

3.重复步骤2,直到所有的顶点都进入了生成树为止,此时的生成树就是最小生成树

 

1.  Prime不带参数void Prime (),默认从图顶点1开始

void prime()

{

         int mincost, index, sum = 0;

         for (int i = 0; i < n; i++)

         {

                   dist[i] = graph[0][i];

                   visit[i] = 0;

         }

         // visit[0]=1; 

         for (int i = 0; i < n; i++)

         {

                   mincost = inf;

                   for (int j = 0; j<n; j++)

                   {

                            if (visit[j] == 0 && dist[j] < mincost)

                            {

                                     index = j;

                                     mincost = dist[j];

                            }

                   }

                   visit[index] = 1;

                   sum += mincost;

                   for (int j = 0; j < n; j++)

                   {

                            if (visit[j] == 0 && dist[j] > graph[index][j])

                                     dist[j] = graph[index][j];

                   }

         }

         printf("%d\n", sum);

}

 

2.  Prime带一个参数int prime(int cur),参数是图的顶点个数

int prime(int cur)

{

    int index;

    int sum = 0;

    memset(visit, false, sizeof(visit));

    visit[cur] = true;

    for(int i = 0; i <n; i ++){

        dist[i] = graph[cur][i];   

    }

   

    for(int i = 1; i < n; i ++){

       

        int mincost = INF;

        for(int j = 0; j < n; j ++){

            if(!visit[j] && dist[j] < mincost){

                mincost = dist[j];

                index = j;   

            }   

        }

       

        visit[index] = true;

        sum += mincost;

       

        for(int j = 0; j < m; j ++){

            if(!visit[j] && dist[j] > graph[index][j]){

                dist[j] = graph[index][j];

            }   

        }   

    }

    return sum;   

}

 

3.  Prime带两个参数,int prime(int cost[][101],int num), 参数是图的顶点个数和图的二维邻接矩阵

int prime(int data[][105],int num)

{

   int mincost,index,sum=0;

 

    for(int i=0;i<num;i++)

    {

        dist[i]=graph[0][i];

        visit[i]=0;

    }

    visit[0]=1;

    for(int i=1;i<num;i++)

    {

       mincost=inf;

 

       for(int j=0;j<num;j++)

         if(!visit[j]&&dist[j]<mincost)

          {

             mincost=dist[j];

             index=j;

          }

 

       visit[index]=1;

       sum+=mincost;

       for(int j=0;j<num;j++)

         if(visit[j]==0&&dist[j]>graph[index][j])

            dist[j]=graph[index][j];

    }

   return sum;

}

算法之路1_Prime

标签:

原文地址:http://www.cnblogs.com/codeofran/p/4801516.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!