Aranjarea programării cailor

De fapt, există o sarcină:

Găsiți numărul de modalități de a plasa pe tabla de șah mărimea lui N * N exact caii K în așa fel încât niciunul dintre ei să nu-l bată pe celălalt. Toți caii sunt la fel, deci dacă într-un aranjament de schimbare a celor doi cai va fi același aranjament.

Specificații Introducere
Într-o singură linie există două numere întregi N (1 <= N <= 6) и K (0 <= K <= N*N).

producție
Obțineți numărul necesar de căi.

Am făcut o sarcină cu ajutorul căutării recursive:

var
a, c: array # 91; 0..20,0..20 # 93; de intreg;
q, fapt, rezultat, j, i, k, n: longint;
dx: array # 91; 0..7 # 93; de număr întreg = (- 2, -1, 1, 2, 2, 1, -1, -2);
dy: array # 91; 0..7 # 93; de număr întreg = (1, 2, 2, 1, -1, -2, -2, -1);

mișcare de procedură (x, y, d: integer); // funcția definește toate celulele pe care calul bate pe coordonatele x și y
Var i: întreg;
începe
pentru i: = 0 la 7 nu
dacă (x + dx # 91; i # 93;> = 0) și (x + dx # 91; i # 93;= 0) și (y + dy # 91; i # 93;inc (d # 91; x + dx # 91; i # 93 ;, y + dy # 93; # 93;
se încheie;

rezolvarea procedurii (dimensiune: întreg); / / bustul în sine
var
i, j: longint;
începe
dacă q = 1 atunci ieșim;

dacă dimensiunea = k atunci
începe
inc (rezultat);
capăt
altfel

pentru i: = 0 până la n-1
pentru j: = 0 până la n-1 nu începeți; se încheie;

fapt: = 1;
pentru i: = 1 până la k
fapt: = fapt * i;

writeln (rezultatul divului rezultat);


Deci, algoritmul funcționează, dar nu se încadrează în timpul dorit, datorită faptului că iau în considerare aranjamentul "același" (cu condiția problemei). Aș vrea să știu o modalitate care să rezolve această problemă.