Вообщем, условие задачи сводится к тому, что конь ходит по каждой клетке шахматной доски только один раз .
Ниже приведен код, который я написал.
Когда ставлю размер доски 6х6, питон более - менее быстро проверяет все варианты и потом выдает правильные результаты. Но когда ставлю 8х8…. не дождался даже и одного варианта. Теперь вопрос, почему? я понимаю о вложенности циклов, рекурсии и все такое, но!!!!!! как?? как народ получает ответ за 2,5 секунды? Хотя тоже использует тупой брут форс как и я? и собственно второй вопрос, как сделать, чтобы программа выдавала только первый найденный ответ?
a =6   # размер  доски
u = 36  # сколько клеток заполнить
xx = 0  #начальные условия
yy = 0  #начальные условия
spis_popitok = [[xx,yy]] # список уже заполненных клеток / nтут первый ход коня
def sledhodi(a,i,j,spis_popitok):  # метод возвращает список возможных след. ходов для данной клетки
    vozm = []
    hod = []
    spis_hodov=[]
    if (i-2)>=0 and j+1<=a-1:      #1
        hod=[i-2,j+1]
        vozm.append(hod)
    if (i-1)>=0 and j+2<=a-1:      #2
        hod=[i-1,j+2]
        vozm.append(hod)
    if (i+1)<=a-1 and j+2<=a-1:    #3
        hod=[i+1,j+2]
        vozm.append(hod)
    if (i+2)<=a-1 and j+1<=a-1:      #4
        hod=[i+2,j+1]
        vozm.append(hod)
    if (i+2)<=a-1 and j-1>=0:      #5
        hod=[i+2,j-1]
        vozm.append(hod)
    if (i+1)<=a-1 and j-2>=0:      #6
        hod=[i+1,j-2]
        vozm.append(hod)
    if (i-1)>=0 and j-2>=0:      #7
        hod=[i-1,j-2]
        vozm.append(hod)
    if (i-2)>=0 and j-1>=0:      #8
        hod=[i-2,j-1]
        vozm.append(hod)
    for x in range(0,len(vozm)):
                    if vozm[x] not in spis_popitok:
                        spis_hodov.append(vozm[x])
    return spis_hodov
 
def main(a,i,j,spis_popitok): #
    if len(spis_popitok)==u:#
        print(spis_popitok)
    else:
        b =sledhodi(a,i,j,spis_popitok)   # список возможных ходов текущего положения
        for x in range(len(b)):
            c = [[],[]]
            c[0] = b[x][0]
            c[1] = b[x][1]
            if len(b)>0: # если список возможных ходов пуст, то возвращаемся назад, если длина больше нуля углубляемся дальше
                main(a,c[0],c[1],spis_popitok+[c]) # берем со списка след. клетку, полученную от итератора for и добавляем ее координаты в список уже использованных
 
 
main(a,xx,yy,spis_popitok)