A beállító lovak programozási

Szigorúan véve ott van a probléma:

Keresse meg a számos módon lehet helyezni a sakktábla mérete N * N pontosan K lovakat úgy, hogy egyikük sem nyomja meg a többi. Minden ló azonos, így ha valami megállapodás cserélni a két lovat, akkor ugyanaz lesz a megállapodás.

bemenet
Egy sorban két egész szám N (1 <= N <= 6) и K (0 <= K <= N*N).

kibocsátás
Nyomtatás a szükséges számú módon.

Tettem a feladatot egy rekurzív felsorolás:

var
a, c: tömb # 91; # 93 0..20,0..20; Az egész szám;
q, sőt, eredmény, j, i, k, n: longint;
dx: tömb # 91; # 93 0..7; A integer = (- 2, -1, 1, 2, 2, 1, -1, -2);
dy: tömb # 91; # 93 0..7; Az egész szám = (1, 2, 2, 1, -1, -2, -2, -1);

eljárás lépés (x, y, d: integer); // funkció azonosítja azokat a sejteket, amelyek veri a ló az x és y koordinátái
Var i: integer;
kezdődik
i: = 0-tól 7 do
ha (x + dx # 91; i # 93;> = 0) és (x + dx # 91; i # 93;= 0) és (y + dy # 91; i # 93;Inc (a # 91; x + dx # 91; i # 93 ;, y + dy # 91; i # 93; # 93 ;, d)
végén;

eljárás megoldja (méret: integer); // maga mell
var
i, j: longint;
kezdődik
ha q = 1, akkor kilépés;

Ha a méret = k, akkor
kezdődik
Inc (eredmény);
vég
más

i: = 0 és n-1 do
j: = 0 és n-1 do kezdődik egy # 91; i, j # 93 ;: = 0; C # 91; i, j # 93 ;: = 0; végén;

Tény: = 1;
i: = 1 k do
Tény: = tény, * i;

writeln (eredmény div tény);


Tehát az algoritmus működik, de nem illik a kívánt időpontban annak a ténynek köszönhető, hogy úgy vélem, „ugyanaz” (azzal a feltétellel, a probléma) elrendezés. Szeretném megtalálni a módját, amely lehetővé tenné, hogy megoldja ezt a problémát.