算法请教,根据2组互斥对,找出一个数组使得和每组互斥对的交集为1

ppcust 2016-09-21 05:09:16
各位算法大牛:

有个算法帮忙分析下:
比如有两个互斥对:
O: O1{1,2}, O2 {3,4}, O3{5,6},O4{7,8}
P: P1{8,3},P2{1,5},P3{4,2},p4{7,6}
得到一组数 X
X { 1,4,6,8 }
X与 Oi 和 Pi 的交集 都为1, 就是说X中只有一个元素和 Oi中一样。

两组数值是一样的,不会出现重复。

从网上找到的算法是这样的。




但这个算法只能解决部分组合情况,现在在算256x256的推导时出错。
出错的组合是:
O: (1,4,) (8,14,) (17,21,) (24,28,) (32,37), (42,46,) (50,53,) (58,60,)
P: ( 24,14,) (17,8,) (1,4,) ( 58,53,) (37,50,) (32,46,) (28,42,) (21,60),
两组数是一样的,只是排列不同。

现在需要求出X,
我手动可以到X (14,17,1,53,37,46,28,60)

但通过上述算法很难实现,

哪位大侠能给些提示:

用C实现最好


...全文
273 点赞 收藏 3
写回复
3 条回复
早打大打打核战争 2016年09月26日
比如你的例子有 (1 8 21 24 32 42 50 58) (1 14 17 28 37 46 53 60) 两组解。
回复 点赞
早打大打打核战争 2016年09月26日
解并不唯一。
回复 点赞
calen_ 2016年09月25日
穷举?毕竟也就穷举 2^n 个(逃 不过这样看来,整个穷举过程是个二叉树,应该能用一些剪枝的技巧
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告