求贴吧大神帮忙…汪汪
class A,
bool A::match(A &x);
match函数满足交换律但没有传递性:
A a,b;
a.match(b) 与 b.match(a) 结果相同
但是,如果 a.match(b)为true && b.match(c)为true, 无法推出a.match(c) 为true( a.match(c) 可能为false).
现在我有一个A类元素的集合vector<A> v; 想把数组v划分成几个子数组, 使子数组中任意两个元素sva,svb, 其match为true(sva.match(svb) 为true),且子数组数量尽可能少, 不同子数组可以含有相同元素.
再总结一下就是:
已知集合S,将S分为多个子集S1,S2。。。Sn,使得子集的并集S1 U S2 U 。。。U Sn = S,其中:n值尽可能小,且对任一子集Sm中任意两个元素e1,e2,e1.match(e2) 为 true, 同一元素可以出现在多个子集中.
求算法… 谢谢
class A,
bool A::match(A &x);
match函数满足交换律但没有传递性:
A a,b;
a.match(b) 与 b.match(a) 结果相同
但是,如果 a.match(b)为true && b.match(c)为true, 无法推出a.match(c) 为true( a.match(c) 可能为false).
现在我有一个A类元素的集合vector<A> v; 想把数组v划分成几个子数组, 使子数组中任意两个元素sva,svb, 其match为true(sva.match(svb) 为true),且子数组数量尽可能少, 不同子数组可以含有相同元素.
再总结一下就是:
已知集合S,将S分为多个子集S1,S2。。。Sn,使得子集的并集S1 U S2 U 。。。U Sn = S,其中:n值尽可能小,且对任一子集Sm中任意两个元素e1,e2,e1.match(e2) 为 true, 同一元素可以出现在多个子集中.
求算法… 谢谢