algorithm - 计算游戏得分 "GO"

标签 algorithm logic

有谁知道在Go的游戏中如何计算分数?以编程方式? 我有一个 19x19 的数组,这个数组的每个元素都可以是 0(空点)、1(黑石)或 2(白石)。我不明白如何检查该区域是否属于任何颜色。

最佳答案

这是一个非常重要的问题,因为围棋游戏通常在玩家做出所有必要的移动以明确游戏的“真实”分数/值(value)是什么之前就结束了。有时,假设一个玩家玩得不是最理想的,游戏的值(value)可能会有所不同(例如,让对手完成建立一组在对手领土上有生命的石头,即使可以证明有可能杀死这组石头)。计算原始未侵入区域是相当明显的,只需检查每个可能的方向组合(正负水平和垂直)中的每个空间是否被板的边缘或一种颜色的 block “切断”。您可以通过从空白点开始进行广度优先搜索来更有效地执行此操作,并跟踪在此过程中遇到的颜色(而不是从占用的点遍历 BFS),一旦找不到更多的空白点,则如果找到的彩色 block 都是一种颜色,那么找到的所有空白都属于该颜色,否则不属于任何人。然后继续广度优先搜索下一个未探索的空白点,删除所有以前探索过的空白点。但是,如果对方在既定领土上有一 block 棋子,那么在计算领土时最好忽略该棋子,实际上甚至可以视为被俘。如果很明显,如果玩家没有失误地下棋,一组在玩家领土上的对手棋子将“最终”被吃掉,情况也是一样的。如果两个玩家进入这样一种情况,即他们每个人都有一组棋子与对方的棋子相邻,这样这些棋子就有“共同的生命”,即如果一个玩家试图努力下棋,情况就会更加微妙杀死对方的棋子,那么对方就可以杀死原来玩家的棋子,反之亦然。

关于algorithm - 计算游戏得分 "GO",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30462341/

相关文章:

java - 使用 float 作为 map 的键

algorithm - 一种从图中获取所有连通子图的算法,它是否正确?

ruby - 此修改后的二十一点游戏的最佳获胜策略是什么?

algorithm - DPLL 和满意度示例?

excel-formula - 为什么 VLOOKUP 不能从右到左运行?

c - C 中的数字模式

algorithm - 写出给定一棵树 : 的前序、中序和后序遍历

c# - 使用循环初始化多个对象

c - 数组游戏。为什么不更新打印?

c# - 如何检查数字字符串是否在运行序列中