【问题标题】:How to recursively fill a tree with 4 children below each node in Java如何在Java中的每个节点下方递归地填充具有4个子节点的树
【发布时间】:2016-05-31 03:12:09
【问题描述】:

我已经用 Java 构建了自己的树数据类,该类将用于极小极大算法。树中的每个节点都将保存一个 Board 对象(我创建的其他东西),代表一个独特的游戏状态,树中的边(整数代表移动方向——游戏是 Tron)将代表用户到达状态边缘导致。我想制作一个函数,它接收一棵树并递归地将其填充到深度“DEPTH”(在其他地方作为常数,而不是参数),并在给定每个玩家在每个级别。我只是不太确定如何最好地做到这一点......

此外,由于它用于极小值,因此树结构必须如下:

  • 代表当前未更改游戏状态的根
  • 在给定用户 4 种可能动作的情况下代表改变的游戏状态的 1 级儿童
  • 在给定对手 4 种可能动作的情况下,代表改变的游戏状态的 2 级儿童
  • 考虑到对手的动作,用户的 4 个动作的 3 级游戏状态,依此类推...延伸到 DEPTH 级数

以下是我必须使用的基本方法:

  • Tree 的构造函数采用板和通向板的整数方向
  • 一种名为produceChildren() 的方法,该方法采用树和布尔值“userMove”,并将4 个新棋盘添加到树的内部子列表中,这些子列表代表在给定用户或对手的4 个可能动作的情况下改变的游戏状态。 'userMove' 参数指定作为子级生成的棋盘是用户 4 步还是对手 4 步的结果。
  • 一个名为 getDepth() 的 Tree 方法返回节点在由其父节点和子节点(如果有的话)组成的较大树中的深度 --> 如果它是根节点,则返回 0

谁能为我提供一些伪代码(使用我提供的方法,除非需要其他方法),以了解如何以这种交替的、极小化的方式填充树?

【问题讨论】:

    标签: java recursion tree minimax


    【解决方案1】:

    在您继续执行逻辑之前,我在您的数据结构上有几个 cmets。

    没有必要在树的每个节点中存储一个完整的棋盘副本。鉴于它被用于极小极大,您在每个点上唯一需要知道的是到达那里的动作和该位置的价值。您需要知道叶子中棋盘的状态才能计算值,但即便如此,一旦计算完成,也无需保留它的副本。

    更进一步,minimax 甚至不需要您保留树的永久副本。如果使用递归完成,每个节点的最大值或最小值可以保存在局部变量中并返回 - 无需在树中保存永久副本。

    minimax 上的维基百科文章有一些伪代码可以帮助您入门。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 2017-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      相关资源
      最近更新 更多