我正在尝试找出一种算法来为循环赛设置比赛位置。
- 每支球队与对方球队交手两次,一次在主场,一次在客场。
- 每支球队都有一个主场。
- 比赛中有许多球队共享相同的主场。
我已经有一个包含所有匹配项的数组。一场比赛看起来像:
{
date: "Thu Jan 08 2015 12:00:00",
home: "Bob",
away: "Frank",
location: null
}
我想遍历所有匹配项并分配location
. 我尝试了各种解决方案,但还没有一个完美的解决方案。
- 当然,如果 Bob 的家庭位置可用,
date
我们就可以使用它。 - 我们必须考虑鲍勃和弗兰克参加的另一场比赛。可以切换主队/客队,但我们必须确保它是平衡的。(即鲍勃和弗兰克在家里各玩一次)
- 如果即使在尝试切换回家/离开之后也无法分配位置,那么我们必须尝试位置拆分。
位置拆分
可以拆分比赛地点,以便在一个地点同时进行多场比赛。我们如何确定一个位置是否可以拆分超出了这个问题的范围,但我们只是说我们有一个调用的函数canLocationBeSplit(location)
,它返回bool
真或假。
两支球队之间的任何一场比赛的主场或客场位置都可以分开。但是,除非绝对必要,否则我们只想开始拆分位置。同样,每支球队必须在主场比赛一次,在客场比赛一次。
如果仍然没有匹配的可用位置,我们将其保留为null
。
问题
所以我的问题是,是否有人对可以解决此问题的合适递归算法有任何建议?谢谢你的时间。