我希望看到沒有遞歸的alpha-beta搜索(更確切地說,negamax)的實現。我知道基本的想法 - 使用一個或多個堆棧來跟蹤關卡的水平,但是有一個真實的代碼會讓我省下很多時間。使用Java,C#或Javascript是完美的,但C/C++沒有問題。沒有遞歸的α-β樹搜索
這裏的(簡化的)遞歸代碼:
function search(crtDepth, alpha, beta)
{
if (crtDepth == 0)
return eval(board);
var moves = generateMoves(board);
var crtMove;
var score = 200000;
var i;
while (i<moves.length)
{
crtMove = moves.moveList[i++];
doMove(board, crtMove);
score = -search(crtDepth-1, -beta, -alpha);
undoMove(board, crtMove);
if (score > alpha)
{
if (score >= beta)
return beta;
alpha = score;
}
}
return alpha;
}
搜索(4,-200000,200000);
發佈你的結構和一些代碼與遞歸將有助於誰會爲你遞減。至少你會更精確地得到你想要的東西。 – 2010-11-05 08:35:06
Google:java alpha-beta搜索negamax – 2010-11-05 08:39:00
@battal,我有正常的遞歸代碼。我無法找到一個非遞歸的。 – Gaspy 2010-11-05 15:24:03