我正在开发一个麻将纸牌解算器,到目前为止,我做得很好。但是,它并没有我希望的那么快,所以我要求你们可能知道的任何其他优化技术。
所有的瓦片都是从布局中知道的,但解决方案不是。目前,我几乎没有规则可以保证安全移除某些相同的瓷砖对(这不会成为可能的解决方案的障碍)。
为清楚起见,当可以随时拾取瓷砖并且瓷砖松动时,当它根本不绑定任何其他瓷砖时,它是免费的。
- 如果有四个免费的免费瓷砖可用,请立即删除它们。
- 如果可以拾取三块瓷砖,并且其中至少有一个是松散的,则移除非松散的。
- 如果可以拾取三张牌,而只有一张免费牌(两张松动),则移除免费和一张随机松动的牌。
- 如果有三个松散的瓷砖可用,请移除其中的两个(无论哪个都无所谓)。
- 由于有四次完全相同的瓷砖,如果剩下两个,请移除它们,因为它们是唯一剩下的。
我的算法递归地在多个线程中搜索解决方案。一旦一个分支完成(到一个没有更多移动的位置)并且它没有导致一个解决方案,它就会将该位置放在一个包含坏的向量中。现在,每次启动新分支时,它都会遍历错误位置以检查该特定位置是否已被检查。
这个过程一直持续到找到解决方案或检查所有可能的位置。
这适用于包含 36 或 72 个图块的布局。但是当有更多时,由于要搜索的位置很多,因此该算法变得非常无用。
所以,我再次问你,如果你们中的任何人有好的想法,如何实施更多的安全瓷砖移除规则或关于算法的任何其他特定加速。
最好的问候, nhaa123