并查集、克鲁斯卡尔算法做题步骤

1、读入给定的变量(如城市数量,城市道路数,起点和终点)

2、建一个代表父节点的数组,写一个初始化函数,令最开始的父节点都是自己。

3、创建结构体:包含 u(城市 u ) ,v(城市 v ) ,w(两个城市间对应的权值)

4、创建一个结构体数组(动态,静态都可以,一维即可)

5、将给出的两个城市之间的信息,存入结构体数组中。

6、对结构体数组进行排序(按权值从小到大),可以写一个 cmp 函数,也可以在定义结构体的时候,对运算符进行重载。

7、调用并编写 kruskal ()函数:

(1)函数没有参数

(2)循环每一条连接两个城市的道路,因为已经按边权值从小到大排序,所以直接按顺序合并两个不同的集合,直到只剩下一个集合为止。

(3)写一个 find(int x)函数,查找城市的父节点,用来判断两个城市是否是一个集合里面的。

如果不是就直接合并(令一个城市的父节点为另一个城市),当只剩下一个时,这个集合就是最小生成树了。

注意:

1、不要在读入变量之前,初始化父节点数组

2、并查集就是不需要排序的 kruskal 。

3、一定要记住:如果使用容器存数据,在排序的时候一定要通过迭代器来访问容器里面的值!!!如:sort ( a.begin( ) , a.end ( ) )。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值