图-最小生成树-Prim

struct
{
    VertexType adjvex;  //U集中的顶点序号
    VRType lowcost;     //边的权值
}closedge[MAX_VERTEX_NUM];

int LocateVex(MGraph G,VertexType v)//返回点v在G.vexs中的下标
{
    for(int i=0;i!=G.vernum;i++){
        if(G.vers[i]==v)
            return i;
    }
    return -1;
}

int minimun(closedge close,int vexnum)
{
    int min=INFINITY;
    int min_place =-1;
    for(int i=0;i<vexnum;i++)
    {//权值为0,说明顶点已经归入最小生成树中,之后每次和min进行比较,找出最小的权值
        if(close[i].lowcost > 0 && close[i].lowcost < min)
        {
            min = close[i].lowcost;
            min_place = i;
        }
    }
    return min_place;           //返回最小权值所在的数组下标
}
void MiniSpanTree_Prim(MGraph G,VertexType u)
{
    k = LocateVex(G ,u);            //返回点u在G.vexs中的下标
    for(int i<0;i<G.vexnum;i++)
    {
        if(i!=k)
        {
            closedge[i].lowcost = G.arcs[k][i].adj;
            closedge[i].adjvex = G.vers[k];
        }
    }
    closedge[k].lowcost =0;             //初始,U={u}
    for(int i=1;i<G.vexnum;i++)
    {
        k=minimum(closedge,G.vernum);       //求出加入生成树的下一个顶点k
        printf("<v%d v%d>",closedge[k].adjvex,G.vexs[k]);
        closedge[k].lowcost =0;             //将k顶点并入U集
        for(int j=0;k<G.vexnum;j++)
        {                                   //修改其他顶点的最小边
            if(G.arcs[k][j].adj < closedge[j].lowcost)
            {
                closedge[j].adjvex =k;
                closedge[j].lowcost = G.arcs[k][j].adj;
            }
        }
    }
    return ;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.一夜知秋.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值