#!/usr/bin/env python import Numeric def find_tour(size, start_x, start_y): moves = [[1, 2], [2, 1], [2, -1], [1, -2], [-1, -2], [-2, -1], [-2, 1], [-1, 2]] board = Numeric.empty([size, size]) trace = [] n_move = 1 for i in range(0, size): for j in range(0, size): board[i, j] = -1 board[0, 0] = 0 cur_x = start_x cur_y = start_y while n_move < size * size: p = [] for move in moves: move_x = cur_x + move[0] move_y = cur_y + move[1] if (move_x >= 0) and (move_y >= 0) and (move_x < size) and (move_y < size) and (board[move_x][move_y] == -1): p.append((move_x, move_y)) while not len(p): cur_x, cur_y, p = trace.pop() board[cur_x, cur_y] = -1 n_move = n_move - 1; cur_x, cur_y = p.pop() board[cur_x, cur_y] = n_move trace.append((cur_x, cur_y, p)) n_move = n_move + 1 return board b = find_tour(8, 0, 0) print b