我在Skiena的算法设计中遇到了问题。我不知道我的解决方案是否正确。
5-18。考虑一组电影M_1,M_2,... M_k。有一组客户,每个客户都指出他们希望在本周末看到的两部电影。电影将在周六晚上和周日晚上播放。可以同时屏蔽多部电影。您必须决定哪些电影应该在周六播出,哪些电影应该在周日播出,这样每个顾客都可以看到他们想要的两部电影。是否有一个每个电影最多只显示一次的时间表?设计一种有效的算法来找到一个存在的时间表。
解决方案: 我们为电影设置了一套{M1,M2..Mk},为客户设置了一套{C1,C2,.. Cp}。我们连接了一部边缘的2部电影,C1希望观看,连接边缘2部电影C2想要观看等等。电影集成为连接图。我想验证它是否是一个二分图,例如2个最喜欢的电影无法在同一个晚上显示(彩色2个不同颜色的收藏电影)。如果就是这样,我们在星期六展示了第一种颜色的彩色电影,在星期日展示了第二种颜色的彩色电影。问题解决了。但是,如果不是我该怎么办?
答案 0 :(得分:0)
问题提到我们可以同时播放电影。周六和周日两套。对于每个客户,检查他想要看的电影是否在不同的集合中,如果他们没有在星期六随机放置一个,在阳光下放一个并继续。如果它们在同一组中,则将其中任何一个放入另一组中。在最坏的情况下,每部电影都将在周六和周日播出。
答案 1 :(得分:0)
根据电影M1,M2,...,Mk创建图形。如果Mi和Mj由客户指示,则我们将Mi和Mj放在边缘。对所有客户重复此操作。然后使用双色算法将电影分为两部分,一组是星期六,另一组是星期日。