import sys
from copy import deepcopy
sys.setrecursionlimit = 1000000
doska = [[-2 for i in xrange(8)] for i in xrange(8)]
def print_doska(doska):
for i in doska:
print i
print '------------------------'
print_doska(doska)
horse = [input(),input()]
n = input()
doska[horse[0]][horse[1]] = -1
print_doska(doska)
def step(N,n,x,y,doska):
if n == 0:
print_doska(doska)
else:
if x>=2 and y>=1:
step1 = deepcopy(doska)
step1[x-2][y-1] = N-n
step(N,n-1,x-2,y-1,step1)
if x>=2 and y<=6:
step2=deepcopy(doska)
step2[x-2][y+1] = N-n
step(N,n-1,x-2,y+1,step2)
if x>=1 and y<=5:
step3=deepcopy(doska)
step3[x-1][y+2]=N-n
step(N,n-1,x-1,y+2,step3)
if x<=6 and y<=5:
step4=deepcopy(doska)
step4[x+1][y+2] = N-n
step(N,n-1,x+1,y+2,step4)
if x<=5 and y<=6:
step5=deepcopy(doska)
step5[x+2][y+1]=N-n
step(N,n-1,x+2,y+1,step5)
if x<=5 and y>=1:
step6=deepcopy(doska)
step6[x+2][y-1]=N-n
step(N,n-1,x+2,y-1,step6)
if x<=6 and y>=2:
step7=deepcopy(doska)
step7[x+1][y-2]=N-n
step(N,n-1,x+1,y-2,step7)
if x>=1 and y>=2:
step8=deepcopy(doska)
step8[x-1][y-2]=N-n
step(N,n-1,x-1,y-2,step8)
step(n,n,horse[0],horse[1],doska)
за быдлокод не пинайть. вроде работает. разберешься сам :)
подсказка:
-2 - клетка, на которой конь не был
-1 - начальная клетка
0,1,2… - последовательность ходов коня
кстати, при большом n конь может (а может и нет) попадать в одну клетку несколько раз - я это при выводе не учитывал. если надо - допилю
пс1: если разберешь исходник - поймёшь алгоритм
пс2: будут вопросы - пишы
пс3: хз насколько релевантно, вот
картинка, по которой я решал
мм, немного не то вывел. я вывел не только эти позиции, но и как к ним пройти. в приниципе тут несложно будет изменить)
___________________________________________________
вот вроде то, что ты просил
import sys
from copy import deepcopy
sys.setrecursionlimit = 1000000
doska = [[0 for i in xrange(8)] for i in xrange(8)]
def print_doska(doska):
for i in doska:
print i
print '------------------------'
horse = [input(),input()]
n = input()
def step(N,n,x,y,doska):
if n == 0:
pass
## print_doska(doska)
elif n <>1:
if x>=2 and y>=1:
step(N,n-1,x-2,y-1,doska)
if x>=2 and y<=6:
step(N,n-1,x-2,y+1,doska)
if x>=1 and y<=5:
step(N,n-1,x-1,y+2,doska)
if x<=6 and y<=5:
step(N,n-1,x+1,y+2,doska)
if x<=5 and y<=6:
step(N,n-1,x+2,y+1,doska)
if x<=5 and y>=1:
step(N,n-1,x+2,y-1,doska)
if x<=6 and y>=2:
step(N,n-1,x+1,y-2,doska)
if x>=1 and y>=2:
step(N,n-1,x-1,y-2,doska)
else:
if x>=2 and y>=1:
doska[x-2][y-1] = 2
step(N,n-1,x-2,y-1,doska)
if x>=2 and y<=6:
doska[x-2][y+1] = 2
step(N,n-1,x-2,y+1,doska)
if x>=1 and y<=5:
doska[x-1][y+1] = 2
step(N,n-1,x-1,y+2,doska)
if x<=6 and y<=5:
doska[x+1][y+2] = 2
step(N,n-1,x+1,y+2,doska)
if x<=5 and y<=6:
doska[x-2][y-1] = 2
step(N,n-1,x-2,y-1,doska)
if x<=5 and y>=1:
doska[x-2][y-1] = 2
step(N,n-1,x-2,y-1,doska)
if x<=6 and y>=2:
doska[x+1][y-2] = 2
step(N,n-1,x+1,y-2,doska)
if x>=1 and y>=2:
doska[x-1][y-2] = 2
step(N,n-1,x-1,y-2,doska)
step(n,n,horse[0],horse[1],doska)
print_doska(doska)