算法分析与设计-14-最小生成树的Prim算法

来源:互联网 发布:lol钻石网吧mac 编辑:程序博客网 时间:2024/06/05 20:23

最小生成树的Prim算法

#include<iostream>using namespacestd; #define NUM 1000#define maxint10000000 void  Prim (int n, int c[][NUM]){         int lowcost[NUM];         int    closest[NUM];         bool s[NUM] = {false};         for (int i=1; i<=n; i++)         {                   lowcost[i] = c[1][i];                   closest[i] = 1;                   s[i] = false;         }         s[1] = true;         for (int i=1; i<n; i++)         {                   int  min = maxint;                   int    j=1;                   for(int       k=2; k<=n; k++)                            if((lowcost[k]<min)&& (!s[k]) )                            {                                     min =lowcost[k];                                     j = k;                            }                   printf("V%d-V%d=%d\n",closest[j], j,min);                   s[j] = true;                   for(int       k=2; k<=n; k++)                            if((c[j][k]<lowcost[k])&& (!s[k]))                            {                                     lowcost[k]= c[j][k];                                     closest[k]= j;                            }         }} int c[NUM][NUM];int main(){         int n, m;         while (scanf("%d%d", &n,&m)!=EOF && n)         {                   int i, j;                   for (i=0; i<=n; i++)                            for (j=0; j<=n;j++)                                     c[i][j] =maxint;                   int v,w,edge;                   for (i=0; i<m; i++)                   {                            scanf("%d%d%d",&v, &w, &edge);                            c[v][w] = edge;                            c[w][v] = edge;                   }                   printf("请出最小生成树:\n");                   Prim(n, c);                   printf("\n");         }         return 0;}

运行效果:


0 0
原创粉丝点击