关于union()并的问题

来源:6-2 Quick Find

慕移动9586716

2021-04-04

bobo老师:
1).它这里这意义是什么?
// 合并过程需要遍历一遍所有元素, 将两个元素的所属集合编号合并
for (int i = 0; i < count; i++)
if (id[i] == pID)
id[i] = qID;
2).这里的if (id[i] == pID) 和id[i] = qID;不会存在值的覆盖问题吗?
3).最后这样操作下去,它合并了,不就变成一个位置放了两个不一样的值了吗,您可以举一个小数据例子来说明一下吗?

写回答

1回答

liuyubobobo

2021-04-04

比如有六个元素:

0 1 2 3 4 5


初始:

0 1 2 3 4 5

0 1 2 3 4 5


表示六个元素分属不同的集合:元素 0 在集合 0;元素 1 在集合 1;元素 2 在集合 2;元素 3 在集合 3;元素 4 在集合 4;元素 5 在集合 5;


现在,如果我们想把元素 2 所在的集合和 元素 3 所在的集合合并在一起,也就是执行 union(2, 3),执行后就变成了:

0 1 2 3 4 5

0 1 3 3 4 5


也就是元素 2 和元素 3 都在集合 3 里,他们在同一个集合里。


如果我们想把元素 3 和 元素 5 合并在一个集合里,也就是执行 union(3, 5),执行后就变成了:

0 1 2 3 4 5

0 1 5 5 4 5


也就是元素 2 , 3, 5 都在集合 5 里,他们在同一个集合里。


继续加油!:)


0
7
liuyubobobo
回复
Mosea
赞!是这样的:)
2021-07-30
共7条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程