- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
谁能建议如何使用计算机程序解决 Log Pile 木制拼图?
请参阅此处以可视化拼图:http://www.puzzlethis.co.uk/products/madcow/the_log_pile.htm
图片仅展示部分作品。全套10件配置如下,1代表钉子,-1代表洞,0代表既不是钉子也不是洞。
-1,1,0,-1,0
1,0,1,0,0
1,-1,1,0,0
-1,-1,0,0,-1
-1,1,0,1,0
0,1,0,0,1
1,0,-1,0,-1
0,-1,0,1,0
0,0,-1,1,-1
1,0,-1,0,0
这些 block 可以互锁成两层,每层 5 个,顶层与底层成 90 度角,如上面的链接所示。
我已经使用 Java 为这个问题创建了自己的解决方案,但我觉得这是一个笨拙的解决方案,我有兴趣看到一些更复杂的解决方案。请随意建议通用方法或以您选择的语言提供工作程序。
我的方法是使用上面的数字符号来创建一个“日志”数组。然后,我使用组合/排列生成器尝试日志的所有可能排列,直到找到所有交叉点都等于零的解决方案(即 Peg 到 Hole、Hole 到 Peg 或 Blank 到 Blank)。我使用一些加速来检测给定排列的第一个失败交叉点,并继续进行下一个排列。
我希望你和我一样觉得这很有趣。
谢谢,克雷格。
最佳答案
这个问题似乎是 Boolean satisfiability problem 的一种形式.如果是,最著名的方法就是蛮力。
但是问题的某些对称性和某些属性可以让您减少需要尝试的解决方案的数量。比如——
关于java - 我怎样才能用计算机程序解决 Log Pile 木制拼图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2572922/
我是一名优秀的程序员,十分优秀!