我在计算以下问题的输出时遇到问题,我必须在测验中解决这个问题。代码是: -
Consider the following program:
for i from 1 to 12:
MakeSet(i)
Union(2, 10)
Union(7, 5)
Union(6, 1)
Union(3, 4)
Union(5, 11)
Union(7, 8)
Union(7, 3)
Union(12, 2)
Union(9, 6)
print(Find(6))
print(Find(3))
print(Find(11))
print(Find(9))
假设不相交集数据结构实现为数组({\ tt smallest} [1 \ dots 12]):( {\ tt smallest} [i])等于包含的集合中的最小元素( i)中。
以下程序的输出是什么?作为答案,输入以空格分隔的四个整数。
经过计算,我得到了答案为1 1 2 1,但它显示为不正确。什么是正确答案??
答案 0 :(得分:0)
对于这样小的输入,您可以手动构建集合并获取
1 6 9
2 10 12
3 4 5 7 8 11
所以只有第一个和最后一个答案是正确的
答案 1 :(得分:0)
因为联盟具有规则:如果rank [i_id]> rank [j_id]:在i下分配j。 我们将得到@MBo提到的集合,因此答案是1 3 3 1
答案 2 :(得分:0)
第一个不交集:1-6-9名称设置为1,
第二个不相交集:2-10-12名称设置为2,
第三个不交集:3-4-5-7-8-11名称设置为3
print(Find(6)) : In set 1
print(Find(3)) : In set 3
print(Find(11)) : In set 3
print(Find(9)) : In set 1
答案:1 3 3 1