Я пытаюсь решить проблему рыцарского тура как упражнение в рекурсии, так как я не использовал его некоторое время, но мой сценарий, похоже, не находит решения и достигает только 56 ходов. Любые советы, чтобы указать мне в правильном направлении, будут оценены.
class KnightsTour
def initialize
board = [nil, nil, nil, nil, nil, nil, nil, nil]
8.times do |i|
board[i] = [0, 0, 0, 0, 0, 0, 0, 0]
end
tour(0,0,board)
end
def tour(x,y,board,current_move=0)
puts board if current_move == 64
return if board[x] == nil ||
board[x][y] == nil ||
board[x][y] != 0 ||
x < 0 ||
y < 0 ||
current_move == 64
current_move +=1
board[x][y] = current_move
tour(x+2, y+1, board.dup, current_move)
tour(x+2, y-1, board.dup, current_move)
tour(x+1, y-2, board.dup, current_move)
tour(x-1, y-2, board.dup, current_move)
tour(x-1, y+2, board.dup, current_move)
tour(x+1, y+2, board.dup, current_move)
tour(x-2, y+1, board.dup, current_move)
tour(x-2, y-1, board.dup, current_move)
end
end
KnightsTour.new
tour(x+2, y-1, board, current_move)
попробует ячейку2, 6
присвоить[x,y] == [0,0]
, поскольку ruby позволяет обращаться ко «второму с конца» элементу какarray[-2]
. - person Aleksei Matiushkin   schedule 18.07.2017