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;
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ă.