I'v searched some alpha beta pruning algorithm implementation and some are pretty diffrent, so I'm not sure if my version is correct. Is it?
Value Searcher::AlphaBeta(Position& pos, Value alpha, Value beta, Depth depth) {
if (depth == 0) {
return Evaluation::Evaluate(pos);
}
Value best = -VALUE_INFINITE;
MoveList list;
MoveGen::GeneratePseudoMoves(pos, list);
for (Move move : list) {
if (!pos.MakeMove(move)) {
continue;
}
Value score = -AlphaBeta(pos, -beta, -alpha, depth - 1);
pos.UnmakeMove(move);
if (score > best) {
best = score;
}
if (score >= beta) {
return best;
}
if (score > alpha) {
alpha = score;
}
}
return best;
}
u/Paul111129 — 9 days ago