【问题标题】:Counting stable discs in Othello在奥赛罗中计算稳定的圆盘
【发布时间】:2012-02-28 19:39:57
【问题描述】:

我正在编写一个黑白棋(黑白棋)引擎,作为稍后实施国际象棋引擎的培训。 我想统计稳定件的数量,但不知道最好的方法是什么。

我可以轻松计算“边缘稳定”部分,但我不确定如何计算其他部分 那些。我使用一维数组来表示棋盘。

感谢任何提示!

【问题讨论】:

标签: java algorithm reversi


【解决方案1】:

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

“通常,当沿所有四个轴(水平, 垂直和每个对角线),它在边界上,在填充的行中,或者 旁边是一块同色的马厩。”

您已经提到了边界 - 填充的行可以通过计算碎片来检查,尽管这里可能有很多优化,例如首先找到填充的行,然后将整行上的每个位置标记为潜在稳定,而不是遍历每个位置然后检查所有相关方向,这将导致浪费精力。

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

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

【讨论】:

  • 嗯......所以我认为没有简单的方法来计算它......所以我只计算边缘上的稳定部分,这是微不足道的。我会看看 Logistello,谢谢。
【解决方案2】:

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

  • 这是一个边界
  • 是稳定的同色片
  • 它在一个填充的行中

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

【讨论】:

  • 我可以管理边界稳定块和填充行。问题是第二种选择:发现棋盘中间的稳定棋子。
猜你喜欢
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 2021-05-28
  • 2020-12-22
  • 1970-01-01
  • 2021-07-06
相关资源
最近更新 更多