我正在尝试使用极小化极大算法创建我的第一个游戏,但我不知道如何使用树来实现这个算法。
游戏规则如下:
-
桌子上有M个立方体(例如40个),每个玩家必须从桌子上拿走1到L个立方体(L在程序中定义,例如L=5)。
-
拿走桌子上的最后一个立方体的玩家获胜。
-
先手玩家是MAX(电脑),后手玩家是MIN(人类)。
首先我们必须运行极小化极大算法,然后MAX玩家会选择最佳的移动方式。
这就是游戏,但我无法想象如何用树来实现这个算法。有人能帮我并给我一些建议吗?
回答:
并不是你创建了一棵树,而是你的搜索过程可以被描述为树状结构。
以更熟悉的井字游戏为例,假设你是X。你有9个选择,9种可能的移动方式。
之后,O将会有8种可能的移动方式,依此类推。
你可以执行深度优先搜索(设定一个深度限制以确保搜索的可行性),每次从子节点获取结果后,你选择最小(或最大)的结果。
这个页面用井字游戏的例子更详细地讨论了这个问题:http://neverstopbuilding.com/minimax。请注意,他们的算法是递归的,这使得累积子节点的得分相对简单。