public class KnightsTour{ private int[][] board; private final static int BOARD_SIZE = 8; private int num = 0; // the current knight to be placed public KnightsTour(){ board = new int[BOARD_SIZE][BOARD_SIZE]; } private boolean free(int row, int column){ if (row<0 || row>=BOARD_SIZE || column<0 || column>=BOARD_SIZE) return false; else return board[row][column] == 0; } private boolean tour(int row, int column){ boolean done = false; if (free(row,column)){ num ++; board[row][column] = num; // System.out.println(this); if (num == BOARD_SIZE * BOARD_SIZE) // tour finished done = true; else{ done = tour (row-2, column-1); if (!done) done = tour (row-2, column+1); if (!done) done = tour (row-1, column-2); if (!done) done = tour (row-1, column+2); if (!done) done = tour (row+1, column-2); if (!done) done = tour (row+1, column+2); if (!done) done = tour (row+2, column-1); if (!done) done = tour (row+2, column+1); } if (!done){ // we must backtrack board[row][column] = 0; // erase knight num --; // num of knights placed decremented // System.out.println(this); } } return done; } public String toString(){ String ret = ""; for (int r=0; r9) ret += " " + board[r][c]; else ret += " " + board[r][c]; ret += "\n"; } return ret; } public static void main (String[] args){ KnightsTour K = new KnightsTour(); if (K.tour(0,0)) System.out.println(K); else System.out.println("No knight's tour possible on a " + BOARD_SIZE + " x " + BOARD_SIZE + " board."); } }