Algoritmus (egy megoldás)
Procedure probal(i: integer; x,y: integer; var Q:boolean);
Var k,u,v: integer;
Begin
k:=0;
Repeat
k:=k+1; u:=x+A[k]; v:=y+B[k];
if (u>=1) and (u<=8) and (v>=1) and (v<=8) and H[u,v]=0
then begin
H[u,v]:=i;
If (i<n*n) then begin
Probal(i+1,u,v,Q)
If not Q then H[u,v]:=0;
End;
Else Q:=true;
End;
Until Q or k=8
End;
Magyarázat
Az i változó tárolja, hogy hányadik szinten vagyunk. Megoldás esetén i=n*n lesz, leraktuk az összes elemet. Az x és y jelöliazt a pozíciót, ahova letettünk elemet.
A H tömb tárolja a megoldást, a Q értéke true, ha találtunk megoldást, u és v pedig az utolsó próbált hely koordinátái. A k változó tárolja, hogy az adott szinten hányadik próbálkozásnál tartunk. (a szisztematikus próbálkozás változója)
Egy pontból maximum 8 lépés lehet (ha pont középen van), így ha ezt végigpróbáltuk, új szintre lépünk. (k:=k+1)
Az x+A[k] a k által kijelölt pozícióba lép, ide fog mutatni u és v (v:=y+B[k]).
If (i<n*n): Ha rajta vagyunk a sakktáblán, és szabad H[u,v]:=i, feljegyezzük a megoldást, hogy hányadik lépéssel kerültük oda.
If not Q: ha még nem vagyunk készen, újrahívjuk az eljárást. Töröljük az előző lépést.
Ha Q igaz, megnéztük a 64. helyet is, az until visszalép a legfelső szintre. Ha k<8, próbálja a következőt.
Az A és B tömb a relatív elmozdulásokat tárolja: hova tud a huszár elmozdulni. Ez maximum 8 lehetséges irányt jelent.
Algoritmus (összes megoldás)
Procedure probal(i: integer)
Var k: integer;
Begin
For k:=1 to 8 do begin
If (A[k]) and (B[i+k]) and (C[i-k]) then begin
X[i]:=k;
A[k]:=false; B[i+k]:=false;
C[i-k]:=false;
If i<8 then probal(i+1);
End
Else kiírás(x)
A[k]:=true; B[i+k]:=true; C[i-k]:=true;
End;
End;
Kezdeti értékek
Q:=false, H tömb nullázása, H[1,1]:=-1 (az első huszárt le kell tenni 1,1 pozícióra)
Probal(2,1,1,Q): először az i értéket (2) írja be az első elmozdított pozícióba