计算奥赛罗的稳定光盘

时间:2012-02-28 19:39:58

标签: java algorithm reversi

我正在编写一个奥赛罗(reversi)引擎,作为后来实施国际象棋引擎的训练。 我想计算稳定件的数量,但不知道最好的方法是什么。

我可以轻松统计'边缘稳定'的作品,但我不确定如何解释对方 那些。我正在使用一维数组代表电路板。

感谢任何提示!

2 个答案:

答案 0 :(得分:0)

来自http://en.wikipedia.org/wiki/Reversi

  

“一般来说,当沿着所有四个轴(水平方向,   垂直,每个对角线),它在一个边界,一个填充的行,或   旁边是一块相同颜色的稳定作品。“

你已经提到了边界 - 只需计算一些部分就可以检查已填充的行,尽管这里可能有许多优化,例如:首先找到填充的行,然后将整行上的每个位置标记为可能稳定,而不是遍历每个位置,然后检查所有相关方向,这将导致浪费精力。

This page有更多有关计算稳定性的详细信息。

如果您对计算机奥赛罗感兴趣,请务必查看publications Logistello,这是(至少几年前)世界冠军。作者Michael Buro撰写了关于这一主题的博士论文。源代码现在可用,因此您可以检查使用的数据结构。从内存来看,我认为他使用三元数(即黑色,白色,空白值)来实现快速查找 - 并且还保持各种模式(行,列,对角线,角落等)的状态,以加快评估功能。

答案 1 :(得分:0)

嗯,我认为它属于你的数据结构。要检查某件作品是否稳定,您必须检查其旁边的所有字段(水平,垂直,对角线)是否遵循以下规则之一:

  • 这是一个边界
  • 这是一个相同颜色的稳定作品
  • 这是一个填充的行

如何检查这取决于您的数据结构。 也许你可以选择一个二维数组,这样你就可以在真正的游戏板上找到一个更接近“8x8矩阵”的图片。