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

 

A bejegyzés trackback címe:

https://delphi-learning.blog.hu/api/trackback/id/tr681601241

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása