所以我设法以对象数组的形式表示拼图。每个拼图可以占据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()
以列表的形式访问一个部分的所有8个配置。有什么指针吗?
答案 0 :(得分:0)
似乎问题可以在两个阶段解决,其中 - 阶段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