prim算法(粗简版)

1.定义一个图的矩阵结构体
typedef struct
{
int quan[100][100];//存储权重
int n,e;//顶点数,边数
}gr;
2.初始化
void cre(gr &g)
{
cout<<“请输入顶点个数,边条数”<<endl;
cin>>g.n>>g.e;
for(int i=0;i<g.n;i++)//将所有权重初始为无穷大
{
for(int j=0;j<g.n;j++)
{
g.quan[i][j]=10000;
}
}
for(i=0;i<g.e;i++)
{
int v1,v2,q;
cout<<“请输入边的信息”<<endl;
cin>>v1>>v2>>q;//输入两点和权重
g.quan[v1][v2]=q;//无向图
g.quan[v2][v1]=q;
}
}
3.pime算法的实现
基本思想是:
从选定的位置v开始,然后将vis[v]设置为1,表示已经访问过,然后将其他点与该点的权重全部放入lowcost[]数组,用n-1次循环,重复以下步骤:
从候选边中选出权值最小的边进行输出,并且将与该边相连的顶点v2加入生成树中,考查剩余所有节点,更新lowcost.
int vis[100]={0};//标记顶点是否被访问
void prim(gr g,int be)
{
int v1=be,sum=0,k;
vis[v1]=1;//v1已被访问
int lowcost[100];
for(int i=0;i<g.n;i++)
{
lowcost[i]=g.quan[v1][i];//将开始点的与剩余的点权重记录下来。
}
for(i=0;i<g.n-1;i++)
{
int min=999;//寻找最小权重
for(int j=0;j<g.n;j++)
{
if(vis[j]==0&&lowcost[j]<min)
{
min=lowcost[j];
k=j;//记录顶点名称
}
}
sum+=min;
vis[k]=1;//将最小权重边的顶点加入生成树,标记已访问
v1=k;
for(j=0;j<g.n;j++)//如果剩下的点中有比lowcost[i]小的,更新lowcost[i]
{
if(vis[j]==0&&g.quan[v1][j]<lowcost[j])
{
lowcost[j]=g.quan[v1][j];
}
}
}
cout<<sum<<endl;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值