【图算法】(3)最小连通网Prim算法以及kruskal算法

本文介绍了最小连通网的问题,详细讲解了Prim算法和Kruskal算法的基本思想、实现步骤及算法实现。Prim算法从顶点出发逐步构建最小生成树,而Kruskal算法通过边的遍历避免回路来构造最小生成树。两者适用于不同的图结构情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.问题的提出

如何在图中选择n-1条边,使得n个顶点间两辆可达,并且这n-1条边的权值最小?设图如下所示:

这里写图片描述

要求:
1.必须使用且仅使用该网络中的n-1条边来连接网络中的n个顶点
2.不能使用产生回路的边
3.各边上的权值总和要求最小

2.Prim算法的基本思想

1.从图N={V,E}中选择某一顶点u0进行标记,之后选择与它关联的具有最小权值的边(u0,v),并将顶点v进行标记
2.反复在一个顶点被标记,而另一个顶点未被标记的各条边中选择权值最小的边(u,v),并将未标记的顶点进行标记
3.如此进行下去,直到图中所有顶点都被标记了为止

3.算法实现步骤

1.从某一顶点u0触发,使得U={u0},TE={}
2.每次选择一条边,这条边是所有(u,v)中权值最小的边,且u∈U,v∈V-U。修改U和TE
TE = TE+{(u,v)}
U = U+{v}
3.当U≠V时,转2,否则结束

4.算法实现

#define VNUM 9              //定义点的最大数量
#define MV 65535            //当两点之间不可达时,权值为65535

int p[VNUM];                //临时数组
int cost[VNUM];             //存储消耗
int mark[VNUM];  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值