【发布时间】:2009-05-27 07:45:16
【问题描述】:
我正在开发一个麻将纸牌解算器,到目前为止,我做得很好。然而, 它没有我希望的那么快,所以我要求进行任何额外的优化 你们可能知道的技术。
所有的图块都从布局中得知,但解决方案不是。目前,我很少 确保安全移除某些相同瓷砖对的规则(这不会成为可能的解决方案的障碍)。
为了清楚起见,当任何时候都可以拾取瓷砖时,瓷砖是空闲的,而瓷砖是松散的,当它根本不绑定任何其他瓷砖时。
- 如果有四个可用的免费磁贴,请立即移除它们。
- 如果可以拾取三块瓷砖,并且其中至少有一块是松散的,则移除未松散的。
- 如果可以拾取三张牌,而只有一张空闲的牌(两张松动),请移除空闲的一张和随机松动的一张。
- 如果有三个松散的瓷砖可用,请移除其中的两个(无论哪个都无所谓)。
- 由于完全相同的图块有四倍,如果剩下两个,请移除它们,因为它们是唯一剩下的。
我的算法递归地在多个线程中搜索解决方案。一旦一个分支完成(到一个没有更多移动的位置)并且它没有导致一个解决方案,它就会将该位置放在一个包含坏的向量中。现在,每次启动新分支时,它都会遍历错误位置以检查该特定位置是否已被检查。
这个过程一直持续到找到解决方案或检查所有可能的位置。
这适用于包含 36 或 72 个图块的布局。但当有更多时, 由于要搜索的位置很多,因此该算法变得几乎毫无用处。
所以,我再次问你们,如果你们中的任何人有好的想法,如何实施更多规则以安全移除瓷砖或任何其他特定的加速算法。
最好的问候, nhaa123
【问题讨论】:
-
听起来您生成了所有可能的瓷砖移除序列,并排除了那些导致解决方案的序列。这肯定会很慢。
-
+1 使用正确的麻将纸牌名称,而不仅仅是“麻将”。