昨天我只是玩Jigshaw Puzzle而不知何故想知道解决它的算法是什么.
作为人类,我遵循的步骤:
我想知道什么是有效解决这个难题的有效算法,什么数据结构将提供最佳的有效解决方案.
谢谢.
解决这样的问题可能看似复杂,特别是如果没有对谜题的大小和复杂性施加约束.
这是我对编写程序来解决这样一个难题的方法的想法.
有四个关键信息可以单独使用,也可以作为解决拼图游戏的线索:
那么程序将提供什么样的信息 - 让我们假设每个拼图是一个小的矩形图像,其透明度信息用于识别拼图块中代表非矩形边缘的部分.
由此,识别四个角件(在典型的拼图中)相对容易.这些将具有两个具有平面轮廓的边缘(参见下面的等高线图).
接下来,我将构建有关拼图块四个边缘每个形状的信息.该信息可用于构建指示哪些部分组合在一起的邻接矩阵.
现在我们可以修剪这个邻接矩阵,以识别那些在相邻配置中具有平滑颜色过渡的片段.这有点棘手,因为它需要一定程度的模糊匹配 - 因为不是每个像素到像素的边界都必然具有平滑的颜色过渡.
使用最初识别的四个角落片段,我们现在应该能够重建拼图中所有片段的尺寸和位置.
用于表示边缘形状的方便的数据结构可以是轮廓图 - 基本上是一组整数,表示从图像的相对侧到拼图块的四个侧面中的每一个中的最后一个非透明像素的距离的增量增量.匹配的碎片应具有镜像轮廓图.
| 归档时间: |
|
| 查看次数: |
10107 次 |
| 最近记录: |