大家好。请帮我解决问题。
有一个数字数组 const arr = [1, 2, 3, 4, 5, 6] (该数组始终是偶数)。还有n个抽象轮,每轮有(arr.length / 2)个匹配
有必要生成所有可能的具有唯一对的旅行。最重要的条件:如果一次旅行中有一对在之前的旅行中已经认识的情侣,那么这样的旅行将被视为无效。算法的结果应该是成对的有效旅行列表
[1,2] 和 [2,1] 对相同
有效示例:
const arr = [1,2,3,4]
result:
Тур1 -> [[1,2], [3,4]]
Тур2 ->[[1,3], [2,4]]
Тур3 ->[[1,4], [2,3]]
无效示例:
const arr = [1,2,3,4]
result:
Тур1 -> [[1,2], [3,4]]
Тур2 ->[[1,3], [2,4]]
Тур3 ->[[3,4], [2,3]]
循环算法允许生成所有回合,确保每个人都玩每个人并且配对不会重复。无需检查任何东西。
我们将数组写成两行并创建相应元素对。
情侣
1-4, 2-5, 3-6我们固定第一个元素,然后循环移位其余元素(不需要物理旋转数组,使用索引移位就足够了)
因此,我们获得了不同对的比赛的
n-1轮次(n-1)*n/2PHP、Python、更多Python、JS可以在EnSO上找到
MBo 的出色回答解释了Round-Robin 的工作原理。事实证明,使用模运算实现起来并不困难:
有一次我用 C# 实现了 round-robin 算法。
n = 8 的结果: