OFFSET
1,3
LINKS
César Eliud Lozada, List of paths for n=1..5
MAPLE
pathCount:=proc(N)
local g1, g2, nStep, gg, nCells, nRow, nCol, nPrev, aNext, nNext, hh, n:
nCells:=N^(2); g1:=[[1]];
for nStep from 1 to N do
g2:=[];
for gg in g1 do
nPrev := gg[-1] ;
nRow:=1+floor((nPrev-1)/(N)); nCol:=1+((nPrev-1) mod N);
aNext:=[];
if nRow-2>=1 then
if nCol-1>=1 then aNext:=[op(aNext), nPrev-2*N-1] fi;
if nCol+1<= N then aNext:=[op(aNext), nPrev-2*N+1] fi;
end if;
if nRow-1>=1 then
if nCol-2>=1 then aNext:=[op(aNext), nPrev-N-2] fi;
if nCol+2<=N then aNext:=[op(aNext), nPrev-N+2] fi;
end if;
if nRow+1<=N then
if nCol-2>=1 then aNext:=[op(aNext), nPrev+N-2] fi;
if nCol+2<=N then aNext:=[op(aNext), nPrev+N+2] fi;
end if;
if nRow+2<=N then
if nCol-1>=1 then aNext:=[op(aNext), nPrev+2*N-1] fi;
if nCol+1<= N then aNext:=[op(aNext), nPrev+2*N+1] fi;
end if;
for nNext in aNext do
if nNext<1 or nNext>nCells or (nNext in gg) then next fi;
g2:=[op(g2), [op(gg), nNext]];
end do:
end do:
g1:=g2;
end do:
#output: comment this block if output is not required
if N>=3 and N<=5 then
hh:=fopen(cat("KnightPaths_", N, ".txt"), WRITE);
for n from 1 to nops(g1) do
fprintf(hh, "%4d: %s\n", n, convert(g1[n], string));
end do:
fclose(hh);
end if;
return nops(g1);
end proc:
lis:=[seq(pathCount(N), N=1..7)];
CROSSREFS
KEYWORD
nonn,walk,more
AUTHOR
César Eliud Lozada, May 02 2016
EXTENSIONS
a(9)-a(15) from Giovanni Resta, May 03 2016
a(16)-a(18) from Bert Dobbelaere, Jan 08 2019
STATUS
approved