如何计算一般C ++代码中Go游戏的领域?

时间:2016-07-10 03:29:05

标签: c++

我真的是编程的新鲜感,我开始使用C ++,我成功地编写了像Tic-Tac-Toe这样的简单游戏,但似乎我在Go Game中经历了很多困难,因为它只是黑军和白军。是的,这并不容易,只是对我而言,我坚持计算领域,我无法想象如何计算......

2 个答案:

答案 0 :(得分:0)

计算GO中的领域是一个特别难的问题,几代开发人员都试图解决它。我不建议尝试将其作为初学者进行编程 - 对于经验丰富的开发人员而言,这可能是一个为期数月的项目。

难怪你为之奋斗。

答案 1 :(得分:0)

这是我如何去做,没有多想。我认为你要求在比赛结束时对明确区域进行评分,而不是试图在比赛期间获得一个位置的可能区域(这在概念上是一个更难的问题)。

首先,在外循环中,我会扫描空位,从左到右从上到下

当我找到一个时,我会用一个区域ID(而不是白色或黑色)填充它,并且对于每个相邻的空,我将递归地重复该过程。使用区域ID填充它可确保您不会重做相同的方块。您可以使用单个值,但我认为ID会使调试更容易!

当我这样做时,我会指望我是否看到过白色或黑色边界。如果,当我用完空的空间时,它只有白色或黑色边界,我会将该区域的数量加到该边的总数上。如果两者都没有,那就没有了。

当最顶层的递归运行没有更多相邻的空白要检查时,您只考虑用尽空白空间。你可以通过让每个递归返回状态 - 白色,黑色或有争议来做到这一点。如果空邻居的所有递归都与此位置相同,则返回该值;否则有争议。如果顶部传递返回黑色或白色,则它是捕获的区域。

基本上,一级2D迭代在每个区域内寻找空和递归,标记和计算/评估。