算法请教,根据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实现最好


...全文
416 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
比如你的例子有 (1 8 21 24 32 42 50 58) (1 14 17 28 37 46 53 60) 两组解。
  • 打赏
  • 举报
回复
解并不唯一。
calen_ 2016-09-25
  • 打赏
  • 举报
回复
穷举?毕竟也就穷举 2^n 个(逃 不过这样看来,整个穷举过程是个二叉树,应该能用一些剪枝的技巧

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧