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