Задать вопрос
@ffff567

Как можно уменьшить количество комбинаций в игре крестики нолики?

На поле размером 3×4 вместо 479 миллионов возможных комбинаций алгоритм анализирует около 1 миллиона, отсеивая остальные. Необходимо оптимизировать алгоритм для работы с более крупными игровыми полями.
Алгоритм основан на методе полного перебора с отсеиванием нерелевантных позиций. Процесс анализа включает следующие этапы
1. Проверка на выигрыш. финиш(позиция, hist) Если текущий ход принадлежит игроку и существует возможность выигрыша за один ход, позиция помечается как выигрышная. Дальнейший анализ этой ветки прекращается
2. Защита от проигрыша перекрытие(позиция, hist) проверяется возможность выигрыша соперника на следующем ходу. Если такой ход существует позиция сохраняется для предотвращения проигрыша. Остальные варианты в этой ветке не анализируются
3.Проверка на ничью if глубина==12 При достижении максимальной глубины (12 ходов) и отсутствии выигрышных позиций для обеих сторон. Позиция помечается как ничейная
4. В остальных случаях позиция сохраняется в словаре для дальнейшего анализа на большей глубине
def перебор(позиция, hist):
    if финиш(позиция, hist): return    
    if глубина!=12:
        if перекрытие(позиция, hist): return 
    if глубина==12:
        словарь[tuple(hist+[позиция.index(0)])]=0
    else:
        for num, b in enumerate(позиция):
            if not b:
                dd=позиция.copy()
                dd[num]=глубина
                temp_словарь[tuple(dd)]=hist+[num]

68a458461a658457420905.png
  • Вопрос задан
  • 84 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Еще можно ставить вилки, они же "выигрыш за 2 хода". Если надо собрать 3 в ряд, то 2 в ряд с двумя пустыми клетками по карям - это уже победа. Так что если есть ход сделать вот это, то делайте его всегда.

Так же угол из двух двоек с пустыми местами через центр - если можно поставить центральную клетку, ставьте

Если нельзя выиграть вот прям щас, или поставить вилку, то надо ставить туда, где будет выигрыш оппонента, и если нет таких, то туда, где будет вилка.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Отражения и повороты. Вместо 12 веток на первом шаге только 4.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы