Это мой рекурсивный метод:
Код: Выделить всё
public double AlfaBeta(int depth, double alpha, double beta, bool maximize, Move move)
{
Chessboard game = (Chessboard)Clone();
if (move != null)
if (move.IsLegal(game))
game.Move(move, false);
try
{
if (depth > DEPTH)
return game.Evaluate();
}
catch
{
return maximize ? double.MinValue : 0;
}
double bestMove;
double value;
List moves;
if (maximize)
{
moves = game.GetTotalLegalMoves('w');
if (moves.Count == 0)
return game.Evaluate();
bestMove = double.MinValue;
foreach (Move cMove in moves)
{
value = game.AlfaBeta(depth + 1, alpha, beta, false, cMove);
bestMove = Math.Max(bestMove, value);
alpha = Math.Max(alpha, bestMove);
if (beta
Подробнее здесь: [url]https://stackoverflow.com/questions/79149309/my-alpha-beta-pruning-implementation-is-too-slow[/url]