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

Что можно ускорить в коде решателя игры крестики нолики?

пока что код не внедрен в саму игру крестики нолики пока что просто тестирую скорость
Текущий код решает полным перебором позицию за 0.45 секунды в итоге создает дерево с оценками -10 проигрыш 0 ничья 10 выигрыш всего получается 55648 комбинаций. Нужно еще ускорить чтобы можно было решать крестики нолики на большом поле.
x=[0, 0, 0, 0, 0, 0, 0, 0, 0]

адреса={0:[[0,1,2],[0,4,8],[0,3,6]], 1:[[0,1,2],[1,4,7]], 2:[[0,1,2],[2,4,6],[2,5,8]],
        3:[[0,3,6],[3,4,5]], 4:[[0,3,6],[1,4,7],[0,4,8],[2,4,6],[3,4,5]], 5:[[2,5,8],[3,4,5]],
        6:[[0,3,6],[2,4,6],[6,7,8]], 7:[[6,7,8],[1,4,7]], 8:[[6,7,8],[0,4,8],[2,5,8]]}

словарь={}
словарь2={}

def выигрыш(i): 
    flag=False
    for num, k in enumerate(i):
        if not k:
            cop=i.copy()
            cop[num]=глубина
            for b in адреса[num]:
                if all(cop[ind]%2==очередь and cop[ind] for ind in b):
                    flag=True
                    словарь2[tuple(словарь[tuple(i)]+[num])]=10 if очередь%2 else -10
    if flag: return True
                
def перебор(позиция, hist):
    if выигрыш(позиция): return
    # if глубина!=9:
    #     if перекрытие(позиция): return   
    if глубина==9:
        for num, b in enumerate(позиция):
            if not b:словарь2[tuple(hist+[num])]=0
    else:
        for num, b in enumerate(позиция):
            if not b:
                dd=позиция.copy()
                dd[num]=глубина
                словарь[tuple(dd)]=hist+[num]


for глубина in [1,2,3,4,5,6,7,8,9]:
    очередь = глубина & 1
    if глубина==1:
        for num, b in enumerate(x):
            if not b:
                xx=x.copy()
                xx[num]=глубина
                словарь[tuple(xx)]=[num]
    else:
        for z,z1 in {**словарь}.items():
            перебор(list(z), z1)
            del словарь[z]
  • Вопрос задан
  • 262 просмотра
Подписаться 1 Простой 3 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик + ИИ
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Python-разработчик + ИИ
    8 месяцев
    Далее
Пригласить эксперта
Ваш ответ на вопрос

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

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