simple_tour n = move 1 1 [[1,1]] n (n*n) legalMove _ [] = True legalMove x (y:ys) | x/=y = legalMove x ys | x==y = False move _ _ solution _ 1 = solution move x y solution n p | x2>0 && x20 && y20 && legalMove [x2,y2] solution = move x2 y2 (solution++[[x2,y2]]) n (p-1) where x2=x+1 y2=y move x y solution n p | x2>0 && x20 && y20 && legalMove [x2,y2] solution = move x2 y2 (solution++[[x2,y2]]) n (p-1) where x2=x-1 y2=y move x y solution n p | x2>0 && x20 && y20 && legalMove [x2,y2] solution = move x2 y2 (solution++[[x2,y2]]) n (p-1) where x2=x y2=y+1 move x y solution n p | x2>0 && x20 && y20 && legalMove [x2,y2] solution = move x2 y2 (solution++[[x2,y2]]) n (p-1) where x2=x y2=y-1 main = simple_tour 3