自己看看的Prim算法

伪代码

1.初始化辅助数组SHORTEDGE [N];

2.输出顶点V0,将顶点0加入集合ù中;

3.重复执行下列操作的N-1次

  3.1再shortEdge [n] .lowcost中选取最短边及对应的邻接点编号k;

  3.2输出顶点k和对应的权值;

  3.3将顶点k加入集合U中

  3.4调整数组shortEdge [n];

v

的#include <iostream的>
#define MaxSize 100
#define INF 0x3f3f3f3f


使用namespace std;


结构图
{
    int vertex [MaxSize];
    int arc [MaxSize] [MaxSize];
    int vertexNum;
    int arcNum;
} G;


/ ** <初始图G * /
void creatGraph()
{
    int i,j,k,w;


    //初始化图ģ
    COUT << “请依次输入图的顶点数,边数及各边的三个数据” << ENDL;
    CIN >> G.vertexNum >> G.arcNum;


    for(i = 0; i <G.vertexNum; i ++)
        for(j = 0; j <G.vertexNum; j ++)
        {
            G.arc [i] [j] = INF;
        }




    for(i = 0; i <G.vertexNum; i ++)
    {
        G.vertex [I] = I;
    }


    for(i = 0; i <G.arcNum; i ++)
    {
        CIN >> J >> K >>瓦特;
        G.arc [J] [K] = W; //无向图
        G.arc [K] [j] =瓦特;
    }
}




//定义声明候选最短边集SHORTEDGE
结构边缘
{
    int lowcost; //该点与另一个集合各点相连比较之下最小权的权
    int adjvex; //该点与另一个集合有最小权的点的位置
};


结构边缘shortEdge [MaxSize];


int minEdge(struct edge * shortEdge,int n)
{
    int i,j,t;


    for(i = 0; i <n; i ++)
    {
        如果(SHORTEDGE [I] .lowcost!= 0)
        {
            T = 1;
            打破;
        }
    }


    for(i = 0; i <n; i ++)
    {
        如果(SHORTEDGE [I] .lowcost <SHORTEDGE [T] .lowcost && SHORTEDGE [I] .lowcost!= 0)
        {
            T = 1;
        }
    }


    返回t;
}


void prim(图G)
{
    int i,j,k;


    //初始化辅助数组(候选最短边集数组)
    for(i = 1; i <G.vertexNum; i ++)
    {
        SHORTEDGE [I] .lowcost = G.arc [0] [I];
        SHORTEDGE [I] .adjvex = 0;
    }


    SHORTEDGE [0] .lowcost = 0; //将顶点0加入集合ù
    for(i = 0; i <G.vertexNum-1; i ++)
    {
        K = minEdge(SHORTEDGE,G.vertexNum); //找到最短边的紫外线中的邻接点
        cout <<“(”<< k <<“,”<< shortEdge [k] .adjvex <<“)”<<':'<< shortEdge [k] .lowcost <<'';
        SHORTEDGE [K] .lowcost = 0;


        //调整SHORTEDGE数组
        for(j = 1; j <G.vertexNum; j ++)
        {
            //主要是比较新加入的,以前加入的都比较过了,现在的低成本已经是他们中最小的权了
            如果(G.arc [K] [j]的<SHORTEDGE [j]的.lowcost)
            {
                SHORTEDGE [j]的.lowcost = G.arc [k]的[D];
                SHORTEDGE [j]的.adjvex = K;
            }
        }
    }
}


int main()
{
    creatGraph();
    整洁(G);
    返回0;
}


样例:

输入:
6 9
0 1 34
1 4 12
0 5 19
4 5 26
0 2 46
2 5 25
3 5 25
4 5 26
2 3 17
输出:

(5,0):19(2,5):25(3,2):17(4,5):26(1,4):12


下面奉上普里姆的详细定义

普里姆算法

猜你喜欢

转载自blog.csdn.net/hitmi_/article/details/80766461