拼图的排列

时间:2014-09-14 09:34:58

标签: java recursion permutation puzzle

所以我设法以对象数组的形式表示拼图。每个拼图可以占据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个配置。有什么指针吗?

1 个答案:

答案 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