Не работает алгоритм минимакс

Требуется написать алгоритм минимакс, который возвращает значение из набора случайных чисел, длинна которого 2^depth, где depth - глубина (алгоритм проходится по бинарному дереву).

вот код алгоритма:

int minimax(int* scores, unsigned int left, unsigned int right, int depth, bool search_max_score, bool& move)
{
    if (search_max_score)
    {
        if (depth == 1)
        {
            int result = std::max(scores[left], scores[right]);
            move = (result == scores[right]);
            return result;
        }

        int left_value = minimax(scores, left, right / 2, depth - 1, false, move);
        int right_value = minimax(scores, right / 2 + 1, right, depth - 1, false, move);
        int result = std::max(left_value, right_value);

        move = (result == right_value);

        return result;
    }
    else
    {
        if (depth == 1)
        {
            int result = std::min(scores[left], scores[right]);
            move = (result == scores[right]);
            return result;
        }

        int left_value = minimax(scores, left, right / 2, depth - 1, true, move);
        int right_value = minimax(scores, right / 2 + 1, right, depth - 1, true, move);
        int result = std::min(left_value, right_value);

        move = (result == right_value);

        return result;
    }
}
    //scores - массив значений, score_num - длина массива, depth - глубина
    //search_max_score - какой элемент искать (false - минимальный, true - максимальный)
    bool move;
    int result = minimax(scores, 0, score_num - 1, depth, search_max_score, move);

    std::cout << "результат: " << result << '\n';
    std::cout << "ход: " << move;

Но иногда программа выводит неправильное значение:

АЛГОРИТМ МИНИМАКС

дерево случайных значений:

     ___/___         __\____
   _/_     _\_     _/_     _\_
  /   \   /   \   /   \   /   \
 -1   3  -5   1  -8   6   4  -7

результат: 1
ход: 0

(Ход это направление последующего действия ИИ. 0 - налево, 1 - направо)


Ответы (0 шт):