我正在用 Java 为游戏编写一个极小极大算法,并且为了提高速度,在我递归地处理决策树时改变游戏状态。但是,这涉及修改我正在迭代的移动列表。
public int minimax(int currentDepth) {
if (currentDepth == depth || board.legalMoves.isEmpty()) {
int eval = board.eval();
board.takeBack(1);
return eval;
}
int x = Integer.MIN_VALUE;
for (Tuple move : board.legalMoves) {
board.move(move);
x = max(x, -1*minimax(currentDepth+1));
board.takeBack(1);
}
return x
}
该board.move()
方法会改变ArrayList legalMoves
,但takeBack(1)
会将其恢复到原始状态。这会导致任何问题吗?