Səkkiz vəzir problemi

Səkkiz vəzir problemiŞahmat taxtasında səkkiz vəzirin bir-birini vurmadan necə yerləşdiriləcəyini müzakirə edən problemdir.Səkkiz vəzir problemi daha ümumi olan n vəzir probleminin xüsusi halıdır. n vəzir problemi nxn ölçülü şahmat taxtasında n sayda vəzirinin bir-birini vurmadan necə yerləşdirilməsi haqqında olan problemdir.

Həll yollarından biri: a7, b4, c2, d8, e6, f1, g3, h5:(87)

Tarixi

Bu problem ilk dəfə 1848-ci ildə şahmat oyunçusu Maks Bezzel tərəfindən ortaya atılmışdır. Daha sonra Qauss, Qeorq Kantor tərəfindən haqqında araşdırmalar aparılmışdır. Məsələnin ilk həlli 1850-ci ildə F.Nauck tərəfindən verilmişdir. Həmçinin Nauck məsələni daha qlobal bir şəkilə nxn halına salmışdır.

Məsələnin həlli

Səkkiz vəzir probleminin 92 həll yolu vardır. Digər həllər yuxarıdakı on iki həllin simmetrik çevrilməsi nəticəsində yaradılmışdır.

N vəzir problemi hələlik 26-a kimi həll edilmişdir. 27 və sonrası yüksək hesablama gücü tələb etdiyinə görə hələlik həll edilməmişdir.

Pascal proqramlaşdırma dilində həlli

program eightqueen1(output); var i : integer; q : boolean;    a : array[ 1 .. 8] of boolean;    b : array[ 2 .. 16] of boolean;    c : array[ -7 .. 7] of boolean;    x : array[ 1 .. 8] of integer; procedure try( i : integer; var q : boolean);    var j : integer;    begin     j := 0;    repeat         j := j + 1;         q := false;        if a[ j] and b[ i + j] and c[ i - j] then            begin             x[ i    ] := j;            a[ j    ] := false;             b[ i + j] := false;             c[ i - j] := false;            if i < 8 then                begin                try( i + 1, q);                if not q then                    begin                     a[ j] := true;                     b[ i + j] := true;                     c[ i - j] := true;                    end                end             else                 q := true            end    until q or (j = 8);    end; beginfor i :=  1 to  8 do a[ i] := true;for i :=  2 to 16 do b[ i] := true;for i := -7 to  7 do c[ i] := true;try( 1, q);if q then    for i := 1 to 8 do write( x[ i]:4);writelnend.

Xarici keçidlər