Форум сайта python.su
Вообщем, условие задачи сводится к тому, что конь ходит по каждой клетке шахматной доски только один раз .
Ниже приведен код, который я написал.
Когда ставлю размер доски 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)
Отредактировано FoozzyY (Фев. 21, 2015 14:25:57)
Офлайн