C++ 从一组集合中找出所有不相交集合的算法是什么?
我有n个集合(n),你可以把你的问题看作布尔两个入口图,元素是行,集合是列,布尔是问题的答案是集合中包含的元素。例如,你的例子是:C++ 从一组集合中找出所有不相交集合的算法是什么?,c++,algorithm,data-structures,set,C++,Algorithm,Data Structures,Set,我有n个集合(n),你可以把你的问题看作布尔两个入口图,元素是行,集合是列,布尔是问题的答案是集合中包含的元素。例如,你的例子是: t A B C 2 1 0 0 5 1 1 1 6 1 0 0 7 1 0 1 1 0 1 0 然后为每个元素创建一个键,描述它所在的不同集合,并在映射中注册该元素 例如,如果我们把密钥创建函数看作是这样的: int keyFunction(bool Xa, bool Xb, bool Xc) { int key =0; if (Xa) {key+=4;
t A B C
2 1 0 0
5 1 1 1
6 1 0 0
7 1 0 1
1 0 1 0
然后为每个元素创建一个键,描述它所在的不同集合,并在映射中注册该元素
例如,如果我们把密钥创建函数看作是这样的:
int keyFunction(bool Xa, bool Xb, bool Xc) {
int key =0;
if (Xa) {key+=4;}
if (Xb) {key+=2;}
if (Xc) {key+=1;}
return key;
}
然后,我们可以创建地图:
Key ElementsQueue
0 []
1 []
2 [1]
3 []
4 [2,6]
5 [7]
6 []
7 [5]
然后返回此映射的元素。您能说几句关于输出属性的话吗,或者更好地说,您是如何获得它的?例如,{2}和{6}为什么是不包括在内吗?@ DaviHead考虑如下:你有2个集合A和B。不相交的集合将是A- B、交叉B和B-A。希望这有助于:不能连接到你的链接:/一个解决方案可以考虑你的问题作为一个双入口地图:行是元素和列集合。我将试着写一个草案。@ 88877已经固定了链接。描述。你能详细说明你的解决方案吗?我会尝试付诸实施草案,如果这个解决方案似乎很好,你如何到达关键值作为4,2,1?@ ACEXBOX,我们可以考虑布尔列表作为二进制数的位。所以[x,y,z ]是x* 2 ^ 2 + y* 2 ^ 1 +z * 2 ^ 0.0。
Key ElementsQueue
0 []
1 []
2 [1]
3 []
4 [2,6]
5 [7]
6 []
7 [5]