gpt4 book ai didi

java - 循环遍历所有组合

转载 作者:行者123 更新时间:2023-12-01 15:35:45 27 4
gpt4 key购买 nike

我正在尝试用 Java 编写多人游戏。

我需要创建所有组合的列表并将它们存储在数组中。

如果游戏开始时有 2 名玩家登录,则组合为:p1,p2 和 p2, p1(位置很重要)

如果有 3 名玩家登录游戏,则组合为:p1,p2,p3; p1,p3,p2; p2,p1,p3; p2,p3,p1; p3,p1,p2 和 p3,p2,p1

事实上,我需要一个冗余数组:如果 3 个玩家登录,我需要提前 3 的组合以及每个可能对的组合p1,p2,p3; p1,p3,p2; p2,p1,p3; p2,p3,p1; p3、p1、p2 和 p3、p2、p1和p1,p2 和 p2, p1和p1,p3 和 p3, p1和p2、p3 和 p3、p2)

许多玩家(已编辑:最多 8 名玩家)可以同时登录到同一轮游戏。 (编辑:最多有 32 个组,但这并不重要,因为组是独立的)

有没有一种快速、简短且简单的方法来为 n 个玩家创建这个组合数组?

递归解决方案是可以预见并且可以接受的。

非常感谢

附注

我目前的想法是将小组分成 2 组,一组选定的玩家和其余玩家。所选择的对是使用 2 个 FOR 循环选择的,其余的则使用第三个循环。如果有 2 名玩家,则不“休息”。如果有 3 名玩家,则 2 个 FOR 将选择该对的位置,其余的将得到休息。然后,使用相同的拆分过程对其余部分进行排序。这样的方式可以实现吗?如何?会有效率吗?再次感谢。

最佳答案

大小为 n 的排列数量为 n!,呈指数增长。例如,20个元素的所有排列的数量是2432902008176640000(~2.43290201 × 10^18),相当大的数字。

就像你猜对了一样,有一个 recursive algorithm生成所有排列,但由于上述原因,它在时间和空间上都相当低效。

但是,如果您的任务是生成随机排列,则确实存在有效的算法:Fisher–Yates shuffle 。它需要 O(n) 时间(假设您可以在 O(1) 中生成随机整数)和 O(1) 额外内存。

关于java - 循环遍历所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8871569/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com