java - 拼图碎片的排列

标签 java recursion permutation puzzle

所以我设法以对象数组的形式表示拼图。每个拼图 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/

相关文章:

python - 重新排序列表以最大化相邻元素的差异

java - 如果添加到包中则无法编译 jar

java - 使用java中的递归字段转换对象并包装到另一个对象

java - 正则表达式:匹配具有重复字符的排列,其中一个字符不能出现多次

java - toString() 方法和递归

recursion - 基本方案递归

algorithm - 数组数组的迭代算法

java - 使用 Dropzone.js 在 Struts2 中上传多个文件

java - EhCache - 不使用 spring 数据进行缓存

java - 尽管已经安装了合适的 eclipse 尚未启动