我一直在考虑解决小谜题的算法。我在互联网和stackoverflow上找到了不同的algortihms,但它们在某些方面不能满足我的需求:
答案 0 :(得分:2)
所以我的出发点只是蛮力 - 在0,0位置放置0,然后开始尝试(0,1)中的任何剩余部分直到一个适合,然后继续前进到(0) ,2)等。在任何步骤中,如果没有适合该空间的碎片,请取出先前合适的碎片并尝试找到该方块的新配合。
我无法证明这一点,但我怀疑填充碎片是为了让你更有可能评估一个有2个约束的棋子(也就是说,而不是做更大的正方形,2x2,3x3,4x4,搬出)将比终止行更快地终止。
它让我想起那些3x3谜题,你有动物头部和尾部的方形碎片。一个优化就是计算对之间的不匹配 - 如果你有A
比a
更多,那么你知道A
将倾向于位于边缘这个谜题,但是在一个8x8的谜题中,你的边缘与内部比例要小得多,所以差异不太可能有用,我也不知道将它集成到算法中。
(编辑)考虑更多,我认为如果不存在解决方案,那么计数的第一件事就是提早出局。 NxN网格必须满足2*N*(N-1)
内部匹配。如果min(A,a) + min(B,b) + min(C,c) + min(D,d) < 2*N*(N-1)
您知道没有解决方案。
(编辑2)有abs(),我的意思是min()。糟糕!