My implementation of (open) Knight's Tour
final List&lt;int[]&gt; moves local to solve shadows private final int[][] moves member. While it may not affect the functionality, it surely makes code harder to understand.
I don't see how moves.isEmpty() could ever be satisfied.
Dealing with visited squares looks suspiciously redundant:


The all squares visited condition is directly derived from currentMove value: currentMove == total, so there is no need to scan the entire visited array.
Similarly, a square visited condition could be implicitly derived from the corresponding board[][] value. Initially, it is -1 for unvisited squares - and you may maintain this invariant by resetting the board[][] to -1 instead of setting visited[][] to false.


This means that you may eliminate visited[][] array.
An x &gt; 0 condition in isLegitMove looks strange, as if the indexing starts with 1 (according to the rest of the program logics it starts with 0). I am not sure I understand why x == 0 makes the move illegitimate. Looks like a potential bug.