gpt4 book ai didi

java - 拼图碎片的排列

转载 作者:太空宇宙 更新时间:2023-11-04 14:33:43 24 4
gpt4 key购买 nike

所以我设法以对象数组的形式表示拼图。每个拼图 block 可以占据 6 个位置。因此,拟合拼图可以转化为排列问题,即 6!。我想在java中实现它和I found this algorithm .

我的问题有两个。这是算法的准确翻译吗?

List<Piece> permutation(List<Piece> prefix, List<Piece> seed){
int n = seed.size();
if (n == 0) {
return prefix;
}
else {
for (int i = 0; i < n; i++) {
prefix.add(seed.get(i));
List<Piece> newSeed = seed.subList(0, i);
newSeed.addAll(seed.subList(i+1, n));
permutation(prefix, newSeed);
}
}

return null;
}

其次,如果每个棋子可以旋转 4 次,然后再翻转并旋转 4 次,即每个单独的棋子可以在一个位置以 8 种不同的方式放置,我如何扩展上面的算法来处理这个问题?为简单起见,我们假设您可以使用 List<Piece> list = Piece.getAllConfigurations() 以列表形式访问一 block 的所有 8 个配置。 。有什么指点吗?

最佳答案

看来这个问题可以分两个阶段来解决,其中- 第 1 阶段是一个排列问题 P(6, 6)- 第 2 阶段是确定每个部分的方向:C(8, 1) ^ 6

对于所有可能的情况,这导致了上面 kajacx 提到的数字:6! * 8^6

我这里有一些通用的排列和组合工具类,您也许可以获取并使用它们: https://github.com/raistlic/raistlic-lib-commons-core/tree/master/src/main/java/org/raistlic/common/permutation

关于java - 拼图碎片的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25831939/

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