我一直在思考一个解决小拼图的算法。我在互联网和stackoverflow上找到了不同的算法,但它们在某些方面不符合我的需求:
- 我的拼图块只有一种颜色,没有图像/图案/...
- 每个部分的边缘可以是8个选项之一,类似于图片上的边缘(例如,您可以将部件描述为ABCD、cdab、cBBb、ADcb);没有更复杂的结构或其他任何东西
- 我想要解决的拼图不大,没有超过8x8的
- 角落/边缘块没有特定的边缘,结果将不是一个干净的矩形
- 并非所有的拼图都能够被解决
- 部件可以旋转但不能翻转
- 每个拼图部件都是唯一的
我一直在思考一个解决小拼图的算法。我在互联网和stackoverflow上找到了不同的算法,但它们在某些方面不符合我的需求:
a
更多的 A
,则您知道 A
倾向于位于拼图的边缘,但是在一个 8x8 的拼图中,你有更少的边缘到内部的比率,因此这种差异不太可能有用,也没有一个好的方法将其集成到算法中。2*N*(N-1)
个内部匹配必须满足。 如果 min(A,a) + min(B,b) + min(C,c) + min(D,d) < 2*N*(N-1)
,则知道没有解决方案。|A-a| + |B-b| + |C-c| + |D-d|
。它不需要是 NxN 的,也可以是 NxM 的。 - Georg Junga
nubs的总数。取差的绝对值可以得到可以形成的最大数量的A-a匹配。如果没有足够的匹配来填充拼图,则无法解决问题;请注意,反之则不一定成立,即使有足够的匹配,如果它们不能正确排列,仍然可能没有解决方案。 - Mikeb< 4N
或 < 2N+2M
。我的错误在哪里? - Georg JungNxM
矩阵中的内部约束数量将为(N * (M-1)) + (M * (N-1))
。 - MikebA
是一种特定类型的突起,而a
则是配合的孔(或相反)?那么我将计算所有不适合任何孔的突起,并将其与边缘突起/孔的数量进行比较?也许我误解了“在这种情况下,A是出现在零件集中的所有A突起的总数,a是所有a突起的总数。”?如何确定“出现在集合中的总数[...]”以及仅“总数”? - Georg Jung