我被要求为3v3排球比赛制定轮转时间表,必须满足以下条件:(从最重要到最不重要)
每个玩家最多只能与另一个玩家玩一次
每个玩家至少玩4次
每个玩家最多只能坐一轮
每个玩家不会再与其他玩家对战
比两倍
当我遇到以下情况时,我正在努力解决蛮力问题: 40名选手 4个法院
我已经能够强行为15个团队提供半功能解决方案,但是手工操作变得太笨拙了,因此我想尝试使用Java程序。我不完全确定如何制定一个蛮力程序来做到这一点。我目前正在尝试使用每3人一组的清单,并将其插入时间表。然后遍历它们进行替换,直到游戏运行。
这是另一个人问的相同问题的另一个版本 https://eso-community.net/viewtopic.php?t=9816
此处的最高答案为8-13岁的团队提供了完美的解决方案
答案 0 :(得分:0)
40人问题有很大的搜索空间,我不认为任何强力解决方案都行得通。只需考虑选择参加一轮比赛的24名球员,就有6x10 ^ 10的方式可以做到这一点,还有更多的方法可以将这24名球员分配到3对3的4个场上。
目前尚不清楚您要寻找的可能如何。拥有4个球场,每个球场6名球员,每轮留下16个再见。因此,非常希望有5圈的任何倍数(i),因为16 x 5i = 80i,因此可以安排每进行5i轮比赛,40支球队中的每支球队都有3i场比赛和2i场比赛。您要求“每个玩家至少玩4次”,所以最好的选择是寻找10轮回合的解决方案,其中每个玩家有6场比赛。这是一个可能的选项,其中所有伙伴都不同,而所有对手都不同。
(38 15 11 v 7 25 23) (33 14 9 v 20 29 19) (40 16 27 v 37 28 21) (34 17 3 v 10 24 32)
(39 11 12 v 8 21 24) (34 15 10 v 16 30 20) (36 17 28 v 38 29 22) (35 18 4 v 6 25 33)
(40 12 13 v 9 22 25) (35 11 6 v 17 26 16) (37 18 29 v 39 30 23) (31 19 5 v 7 21 34)
(36 13 14 v 10 23 21) (31 12 7 v 18 27 17) (38 19 30 v 40 26 24) (32 20 1 v 8 22 35)
(37 14 15 v 6 24 22) (32 13 8 v 19 28 18) (39 20 26 v 36 27 25) (33 16 2 v 9 23 31)
(36 5 33 v 12 32 15) (13 7 24 v 20 4 2) (25 1 28 v 30 10 31) (37 26 38 v 3 9 18)
(37 1 34 v 13 33 11) (14 8 25 v 16 5 3) (21 2 29 v 26 6 32) (38 27 39 v 4 10 19)
(38 2 35 v 14 34 12) (15 9 21 v 17 1 4) (22 3 30 v 27 7 33) (39 28 40 v 5 6 20)
(39 3 31 v 15 35 13) (11 10 22 v 18 2 5) (23 4 26 v 28 8 34) (40 29 36 v 1 7 16)
(40 4 32 v 11 31 14) (12 6 23 v 19 3 1) (24 5 27 v 29 9 35) (36 30 37 v 2 8 17)