所以我有3到8名球员,我希望每个人都能对抗所有其他球员1对1。 匹配按顺序一个一个地完成。 一对中的排序并不重要(a vs b == b vs a)。
我正在一个简单的嵌套循环中创建匹配对,我在其中循环播放器并将当前索引与所有以下索引配对。
问题在于,玩家1将完成所有比赛然后无所事事,而玩家8将不得不等待。
有没有办法均匀分配对,所以所有玩家都有相同的停机时间?
我目前正在随机化包含这些对的数组,但我正在寻找更好的方法。
答案 0 :(得分:3)
您可以使用Round-robin tournament scheduling algorithm。
circle方法是为a创建计划的标准算法 循环赛。所有参赛者都被分配到数字,和 然后在第一轮配对:
第1轮(1次14次,2次13次,......)
1 2 3 4 5 6 7 14 13 12 11 10 9 8
然后修复表格的第一列或最后一列中的一个贡献者(本例中为第一列)和 顺时针旋转其他位置
第2轮(1次13次,14次12次,......)
1 14 2 3 4 5 6 13 12 11 10 9 8 7
第3轮(1次12次,13次11次,......)
1 13 14 2 3 4 5 12 11 10 9 8 7 6
直到你几乎回到初始位置
第13轮(1次2次,3次14次,......)
1 3 4 5 6 7 8 2 14 13 12 11 10 9
答案 1 :(得分:0)
将比赛按顺序保存在一个数组中,然后按照这样的方式随机播放
function shuffle(a) {
for (let i = a.length; i; i--) {
let j = Math.floor(Math.random() * i);
[a[i - 1], a[j]] = [a[j], a[i - 1]];
}
}
然后像这样使用它
var myArray = ['1','2','3','4','5','6','7','8','9'];
shuffle(myArray);
取自Here