prim算法 图(邻接矩阵)

struct a
{
    char   adjex;//边上另一个顶点
    int lowcost;// 边上权值
};//辅助结构体

//.lowcost设置为0表示点已经并入最小生成树中,adjex表示最小生成树中该点所在边的另一个点,

void prim(graph g,char v)
{
    int sum=0;
    int i,j,k,s,index,min;
    a closedge[mvnum];
     k=locate(g,v);//返回v的下标 
    closedge[k].lowcost=0;//将点进入u集合中。 
    for(i=0;i<g.vexnum;++i)
    {
        if(i!=k)
        {
            closedge[i].adjex=g.vexs[k];
            closedge[i].lowcost=g.arcs[k][i];
        }
    }初始时候将以第一点为起始点其他边上顶点,和权值。
    
    for(i=1;i<g.vexnum;i++)//对剩下的点输出  因为有n-1条边
    {
    //假设下标0最小权 
        for(s=0;s<g.vexnum;s++)
        {
            if(closedge[s].lowcost!=0)
            {
                min=closedge[s].lowcost/找到一个非0设为最小 t;
                k=s;//记录下标 
                break;
            }
        }
        
        for( j=0;j<g.vexnum;j++)
        {
        if(min>closedge[j].lowcost&&closedge[j].lowcost!=0)        
        {
            k=j;//获取权值最小的下标 
            min=closedge[j].lowcost;//找到最小 
        }    
        }
        
        char u0=closedge[k].adjex;
        char v0=g.vexs[k];
        cout<<u0<<" "<<v0<<"权值为"<<closedge[k].lowcost<<endl;// 输出最小边和权值
        sum+=closedge[k].lowcost;
        closedge[k].lowcost=0;
        
        for(j=0;j<g.vexnum;j++)
        {
            if(g.arcs[k][j]<closedge[j].lowcost&&g.arcs[k][j]!=0)//以k为起始点的边权值小于其他最后点权值,小于就写 
            {
                closedge[j].adjex=g.vexs[k];
                closedge[j].lowcost=g.arcs[k][j];
            }
        }
    }
    cout<<"权值之和为"<<sum<<endl;
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

䔴䔴䔴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值