这不是特定于语言的问题,但是为了便于讨论,我目前使用C#7。
[多年来,我已经成功实现了Alpha Beta修剪算法(即使在35年前的PASCAL中也是如此:]
[每次,我都创建了游戏状态的半深副本(在下面讨论),该副本针对每个节点重复出现。我经常想知道这是否必要,或者也许我不是真正了解算法。
互联网上到处都有关于TicTacToe的帮助请求,这使我认为这必须是一个常见的学校作业问题-有点阻塞了这个相当基本的主题的搜索。
半深副本 ...在我看来,每个节点都应该知道:
我的问题是:每个节点是否需要自己的电路板副本? ……例如国际象棋(Chess)具有8x8网格……该算法是否还有一些细微之处,还是这些节点各自需要自己的电路板状态快照?节点可以使用一些很酷的方法(除了copy和apply-possible-move之外)从其父级获取其状态吗?
[也许有人可以解释或指向“读这篇,虚拟的”帖子,或者只是确认我需要创建这些实例,正如我试图描述的那样,每个递归调用都具有自己的内存副本游戏板。
我意识到在过去的几十年中,内存变得便宜了,但是组合爆炸仍然是主要话题。干杯。
我不确定这是否能回答您的问题。但是,您能代替轮流制作副本,进行递归调用然后撤消该动作吗?类似于: