我正在尝试实现minimax算法。
(对于那些不熟悉的人:2个对手的递归函数(每个都有自己的转向。例如国际象棋,去等),它计算出什么是最好的举动对于玩家的每个回合,通过递归计算玩家A的选定动作的结果,反之亦然。
它被称为Minimax,因为第一个玩家总是试图最大化他的结果,而第二个玩家总是试图最小化第一个结果[这也意味着最大化他的结果])。
调用该函数的玩家类具有棋盘(这是另一个类)。 玩家通过在棋盘上放置一个棋子进行游戏,并且还有另一个功能来计算得分/启发式得分。
我的问题如下:在计算每个玩家的结果时,我需要将棋子放在棋盘上,然后进行所有计算。一旦我再次上传递归树,我的更改是否会被删除?
我觉得它不会,因为即使Java通过值传递,我仍然改变了Player的表。所以我想知道我是否应该每次复制我当前的电路板并虚拟播放/通过电路板作为参数/等等......
答案 0 :(得分:0)
我觉得它不会,因为即使Java通过值传递,我仍然会改变玩家的表格。所以我想知道我是否应该每次复制我当前的电路板并虚拟播放/通过电路板作为参数/等等......
这是一个选择。另一种解决方案(计算效率通常更高)是实现并使用undo()
函数来反转移动对电路板的影响。