美文网首页
带权连通图的最小生成树——PRIM普瑞姆算法的理解

带权连通图的最小生成树——PRIM普瑞姆算法的理解

作者: 呵呵哒1991 | 来源:发表于2017-04-24 17:42 被阅读601次

    1. 图上任意找一点

    2. 找到 与 步骤一的点连接的点中权值最小的那个点。

    3. 将上述的两个点作为一个整体,找出 与此两个点相连 权值最小的第三个点

    4. 将上述3个点 形成的树作为整体 只考虑 度是1的点的连线的最小权值,寻找第四个点。

    5. 重复上述步骤 。

    6. 所有点找完后就是 最小生成树。

    9fb316cd967dc54ff48dd62a2719aeb0.jpg

    ```
    // 代码是优化过的,细节很多 ,所以强行理解 有一定难度
    void MiniSpanTree(MGraph G)
    {
    int min ,i,j,k;
    int adjvex[MAXVEX];
    int lowcost[MAXVEX];
    lowcost[0]=0;
    adjvex[0]=0;

    for (i=1; i<G.numVertexes;i++)
    {
    
        lowcost[i]= G.arc[0][i];
        adjvex[i] =0;
    }
    
    for(i=1 ;i<G.numVertexes;i++)
    {
        min = INFININY;
        j=1;
        k=0;
        // 初始化 lowcost 并找出最小的连接点
        while (j<G.numVertexes)
        {
            if(lowcost[j]!=0&& lowcost[j]<min)
            {
                 min=lowcost[j];
                 k=j;
            }
            j++;
    
        }
        printf("(%d,%d)",adjvex[k],k);
        //  记录 最小的点
        lowcost[k]=0;
    
        for (j=1;j<G.numVertexes;j++)
        {
             if(lowcost[j]!=0&& G.arc[k][j]<lowcost[j])
             {
                  lowcost[j]=G.arc[k][j];
                   adjvex[j]=k;
             }
        }
    }
    

    }

    相关文章

      网友评论

          本文标题:带权连通图的最小生成树——PRIM普瑞姆算法的理解

          本文链接:https://www.haomeiwen.com/subject/hgvpzttx.html