首先:使用哪种编程语言无关紧要,将其转换为其他编程语言很容易。
我有一个很难解决的问题,我不知道如何开始。我有X种水果和 5种颜色(比方说红色,绿色,黄色,蓝色和紫色)。每种水果都有多种颜色可供选择(但至少有1种)。我怎样才能找到每种组合,当我需要每种颜色的1个果实但没有两次果实时(因此总会以5种不同的颜色购买 5种不同的水果 )?
例如:
1. Pears are available in [Red, Green, Yellow]
2. Apples are available in [Red, Green]
3. Plums are available in [Purple]
4. Grapes are available in [Red, Green, Purple]
5. Bananas are available in [Blue, Yellow]
由于香蕉是唯一可用蓝色的水果,所以已经确定,香蕉将以蓝色购买,而不是黄色。
这些将是此列表的解决方案:
1. Yellow Pear, Red Apple, Purple Plum, Green Grapes, Blue Banana
2. Yellow Pear, Green Apple, Purple Plum, Red Grapes, Blue Banana
这里没有其他组合可行。是否有任何算法可以使用动态列表来执行此操作,该列表可能还有超过5个水果?
我知道,这是一个非常难的问题,但也许某人有一个简单的解决方案。
答案 0 :(得分:1)
根据我的理解,问题可以建模为bipartite matching problem;这里颜色构成一个分区,而果实构成另一个分区。当且仅当水果c
有颜色f
时,才会存在颜色f
和水果c
之间的边缘。目标是涵盖所有颜色。