Informatika gyűjtemény

Egy szinttel feljebb Megoldás

2004050607080910

NézetNyomtat

Algoritmus

Egy lehetséges elhelyezést megadó algoritmus

Eljárás bt(i)
    Ha i > 0 
    akkor
        d[i] := d[i] + 1
        Ciklus amíg d[i]<=8 és rossz(i)
            d[i] := d[i] + 1
        Ciklus vége
        Ha d[i] <= 8 
        akkor
            Ha i = 8 
            akkor 
                KI( d[] ) 
            különben 
                bt(i+1)
            Elágazás vége
        különben
            d[i] := 0;
            bt(i-1);
        Elágazás vége
    Elágazás vége
Eljárás vége
Függvény rossz(i):logikai
    rossz := hamis
    Ciklus j := 1-től (i-1)-ig 
        Ha (T[j]=T[i]) vagy (T[j]-j=T[i]-i) vagy (T[j]+j=T[i]+i)
        akkor 
            rossz := igaz
            kiugrás a ciklusból
        Elágazás vége
    Ciklus vége
Függvény vége
// főprogram
    bt(1);

Az összes megoldás előállítása

Egyetlen apró módosítás kell: helyes megoldás megtalálása után is visszalépünk.
Eljárás bt(i)
    Ha i > 0 
    akkor
        d[i] := d[i] + 1
        Ciklus amíg d[i]<=8 és rossz(i)
            d[i] := d[i] + 1
        Ciklus vége
        Ha d[i] <= 8 
        akkor
            Ha i = 8 
            akkor 
                KI( d[] ) 
                // tovább keresünk, ezért most is visszalépünk
                d[i] := 0
                bt(i-1)
                // idáig tart a módosítás
            különben 
                bt(i+1)
            Elágazás vége
        különben
            d[i] := 0;
            bt(i-1);
        Elágazás vége
    Elágazás vége
Eljárás vége

Kódok