首页 > 其他 > 详细

Prim

时间:2019-11-23 23:47:35      阅读:106      评论:0      收藏:0      [点我收藏+]

加点法求最小生成树

建立两个数组closet和lowcost,用于记录V-U中顶点j到U中顶点的最小边。

对V-U中的一个顶点j,他的最小边对应U中的某个顶点用closet[j]保存,对应边权为lowcost[j]

lowcost[i]=0,i属于U,lowcost[i]不等于0,i属于V-U

void Prim(MatGraph g, int v)
{
    int closet[MAXV];
    int lowcost[MAXV];
    int min;
    int i, j, k;
    for (i = 0; i < g.n; i++)
    {
        lowcost[i] = g.edges[v][i];
        closet[i] = v;
    }
    for (i = 1; i < g.n; i++)
    {
        min = INF;
        for (j = 0; j < g.n; j++)
        {
            if (lowcost[j] != 0 && lowcost[j] < min)
            {
                min = lowcost[j];
                k = j;
            }
        }
        lowcost[k] = 0;
        printf("边(%d,%d)权为%d\n", closet[k], k, min);
        for (j = 0; j < g.n; j++)
        {
            if (lowcost[j] != 0 && lowcost[j] > g.edges[k][j])
            {
                lowcost[j] = g.edges[k][j];
                closet[j] = k;
            }
        }
    }
}

  测试数据

7

0 28 100 100 100 10 100

28 0 16 100 100 100 14

100 16 0 12 100 100 100

100 100 12 0 22 100 18

100 100 100 22 0 25 24

10 100 100 100 25 0 100

100 14 100 18 24 100 100

 

Prim

原文:https://www.cnblogs.com/KIROsola/p/11920475.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!