       3. 室 ॢ. ॡ  ⠬.

     3.1. ২,  騥  㣠: 室 ॢ 権

       ।饩   ᬠਢ ᪮쪮  
 ⮣  ⨯: "᫨    ண  ⢠
A". 奬 襭 뫠 ⠪:  ⢥ A  冷 
뢠  楤  室   ந쭮  -
⢠ A  ᫥饬   ( ⮬ 浪).    奬  
ᥣ  㤠  ॠ  ।⢥,   ⮩  
ᬮਬ 㣮  ਥ ᫥  ⮢ -
ண ⢠.  뢠 "    ⠬",  "⮤
⢥   ࠭", "backtracking".     筮
 ⮣ ⮤ - 室 ॢ.

     3.1.1. ᫨  ᯮᮡ ⠭ n ৥  -
⭮ ᪥ n  n,       㣠.

     襭. 祢,    n ਧ⠫   -
    .  㤥  뢠 k-樥 ( k = 0, 1,...,n)
ந ⠭ k ৥  k  ਧ⠫ (-
    㣠). 㥬 "ॢ 権":  ୥
㤥 ⢥ 0-,     k-樨  室  n
५    (k+1)-樨.  n 権 ⫨ -
   (k+1)- ਧ⠫. 㤥 ,   ᯮ-
     㭪 ᮮ⢥  ⮣ : 
 ,  ன  ᯮ .

                                        ॢ 権 
                                           n = 2








। 権 ⮣ ॢ   ⮡  n-樨,  -
 ২    㣠. ணࠬ 㤥 "室  -
"  ᪠ . ⮡   譥 ࠡ, ⨬  :
᫨    -  k-樨  ২    㣠,  ⠢
쭥 ৥ ᫠ . ⮬, 㦨 ,    㤥
४ ஥ ॢ  ⮬ ࠢ.

     筥,    k- ⨬, ᫨ ᫥ 㤠
孥  ⠢訥    㣠.  ணࠬ -
 ᬠਢ ⮫쪮 ⨬ 樨.




                                         ॢ ⨬
                                         権  n = 3









     쥬    : (1) 室 ந쭮 -
  (2) ॠ ॢ ⨬ 権.
     㫨㥬  室 ந쭮 ॢ. 㤥 -
,     ,     室
   設 ॢ (設 ࠦ  㭪  㦮-
).  㬥 믮 :

                              _  (  ᠬ 
                                  室  ५)

                              ࠢ (३  ᥤ  ࠢ
                                 設)

                               (    -
                                 )

            _
            ࠢ
            

 ஢ન, ᮮ⢥騥  믮    -
,   뢠  "_ᢥ",  "_ࠢ",  "_᭨"
(᫥ ⨭ , ஬ ).   ,  
 "ࠢ"  ३   "த ",  
 "த".


                                      "ࠢ"
                                     !



     㤥 ,      "ࠡ"  
  - ࠡ     (設,      
५ ,    ᫮ "_ᢥ" ).  -
襩  嬠⭮     ࠡ 㤥 ᮮ⢥⢮
஢ઠ   樨 ৥.

     ⥫⢮  ࠢ쭮 ਢ  ணࠬ -
 ⠪ ।.  䨪஢   
  設 ॢ.    ॢ  ࠧ  
  ⥣ਨ:  ⮬,    ࠢ . (
     室 १ 設  ⮬,  ᢮-
稢  ,   室    ᢮稢 ࠢ,  室
 .) १ () 稬 ᫮ "ࠡ⠭   -
 ",  १ () - ᫮ "ࠡ⠭    -
   ⮬".












  ⠪ 楤:

  procedure __㯮__ࠡ
  | {: (), : ()}
  begin
  | {ਠ: }
  | while _ᢥ do begin
  | | _
  | end
  | {,   }
  | ࠡ;
  | {}
  end;

᭮ :

  :   ୥,   ࠡ⠭
  :   ୥,  ࠡ⠭

  {}
  __㯮__ࠡ
  {ਠ: }
  while _᭨ do begin
  | if _ࠢ then begin {,  ࠢ}
  | | ࠢ;
  | | {}
  | | __㯮__ࠡ;
  | end else begin
  | | {,  _ࠢ, _᭨}
  | | ;
  | end;
  end;
  {,   ୥ =>   ࠡ⠭}

⠫  ᯮ짮  ᫥騬  ᢮⢠   
(ᢥ ᠭ ᫮,   믮 , ᭨ -
⢥ত  १  믮):

   (1) {,  _ᢥ}  (2) {}
       ࠡ                _
       {}                     {}

   (3) {_ࠢ, }    (4) { _ࠢ, }
       ࠢ                    
       {}                      {}

     3.1.2. ,  ਢ ணࠬ 蠥 ࠡ
(  筮 ॢ).
     襭. 楤 _  蠥  ࠡ  (
    㢥稢 ᪮筮). ᫨ ணࠬ ࠡ-
⠥ ᪮筮, , ᪮   ࠡ뢠  -
, 稭  ண      ࠡ뢠.
    ,  ⮫쪮  ᫨   ६ ᪠ .
⨢稥. ( 業 ᫠ ⢨ . .)

     3.1.3.  ࠢ쭮 ᫥饩 ணࠬ 室 -
ॢ:

  var state: (WL, WLU);
  state := WL;
  while _᭨ or (state <> WLU) do begin
  | if (state = WL) and _ᢥ then begin
  | | ;
  | end else if (state = WL) and not _ᢥ then begin
  | | ࠡ; state := WLU;
  | end else if (state = WLU) and _ࠢ then begin
  | |  ࠢ; state := WL;
  | end else begin {state = WLU, not _ࠢ, _᭨}
  | |  ;
  | end;
  end;

     襭. ਠ 横:
        state = WL  => 
        state = WLU => 
⥫⢮ 襭 ࠡ: 室  ﭨ    
  ⮫쪮    ࠡ⪥ 設, ⮬ ᫨ ணࠬ
ࠡ⠥ ᪮筮,   ண  祭  state  
,  .

    3.1.4.     室 ॢ, ᫨  ⨬, ⮡
ࠡ뢠  設 ( ⮫쪮 ).

    襭.  x -  設.   設  y
⭮     ⥣਩. ᬮਬ   
 y.  :
    ()       x (y  x);
    () ᢥ     x (y  x);
    () ன १ x (y  x);
    () ᢥ ࠢ    x (y ࠢ x);
  ⭮,  ᠬ 設 x ⭮  ⥣ਨ (). ᫮
⥯  ⠪:
    () ࠡ⠭  設   ;
    () ࠡ⠭  設 ,   .
  㤥 룫拉 ணࠬ:

  procedure __㯮__ࠡ
  | {: (), : ()}
  begin
  | {ਠ: }
  | while _ᢥ do begin
  | | ࠡ
  | | _
  | end
  | {,   }
  | ࠡ;
  | {}
  end;

᭮ :

  :   ୥, 祣  ࠡ⠭
  :   ୥,  設 ࠡ⠭

  {}
  __㯮__ࠡ
  {ਠ: }
  while _᭨ do begin
  | if _ࠢ then begin {,  ࠢ}
  | | ࠢ;
  | | {}
  | | __㯮__ࠡ;
  | end else begin
  | | {,  _ࠢ, _᭨}
  | | ;
  | end;
  end;
  {,   ୥ =>  設 ࠡ⠭}

     3.1.5. ਢ ⮫쪮  ணࠬ ࠡ뢠 -
  ⮣,  ࠡ⠭    ⮬.   ,
⮡  設,   ⮬, ࠡ뢠 -
:  ࠧ ,  㣮 ࠧ ᫥  ᢮ ⮬? (
-० ࠡ뢠  ࠧ.)

    襭.   "ࠡ⠭   " 㤥  "
ࠡ⠭  ࠧ, ᫥ ࠡ⠭  (   ࠧ,
⠭  )".  "ࠡ⠭ ,   " 㤥 -
 " ࠡ⠭  ࠧ,    - ".

ணࠬ 㤥 ⠪:

  procedure __㯮__ࠡ
  | {: (), : ()}
  begin
  | {ਠ: }
  | while _ᢥ do begin
  | | ࠡ
  | | _
  | end
  | {,   }
  | ࠡ;
  | {}
  end;

᭮ :

  :   ୥, 祣  ࠡ⠭
  :   ୥,  設 ࠡ⠭

  {}
  __㯮__ࠡ
  {ਠ: }
  while _᭨ do begin
  | if _ࠢ then begin {,  ࠢ}
  | | ࠢ;
  | | {}
  | | __㯮__ࠡ;
  | end else begin
  | | {,  _ࠢ, _᭨}
  | | ;
  | | ࠡ;
  | end;
  end;
  {,   ୥ =>  設 ࠡ⠭ }

     3.1.6. ,  ᫮ 権  ⮩ ணࠬ  -
浪 ࠢ  設 ॢ. (   㣨 ணࠬ, -
  ⫨  ⮩  ய᪮   "-
".)
     . ਬ୮  ஥  ⢨    ᯮ
⮩ ணࠬ - ࠡ⪠ 設,   設 ࠡ뢠-
 ᨬ .

      ॠ㥬 樨  ॢ 権.   㤥
।⠢    ६ k: 0..n (᫮ ৥)  -
ᨢ c: array [1..n] of 1..n (c [i] - न     i-
ਧ⠫;  i > k 祭 c [i] ஫  ࠥ). ।-
,     樨 ⨬ (᫨  孥 ,
⠫    㣠).

  program queens;
  | const n = ...;
  | var
  |   k: 0..n;
  |   c: array [1..n] of 1..n;
  |
  | procedure begin_work; { ࠡ}
  | begin
  | | k := 0;
  | end;
  |
  | function danger: boolean; {孨   }
  | | var b: boolean; i: integer;
  | begin
  | | if k <= 1 then begin
  | | | danger := false;
  | | end else begin
  | | | b := false; i := 1;
  | | | {b <=> 孨    ৥  ࠬ < i}
  | | | while i <> k do begin
  | | | | b := b or (c[i]=c[k]) {⨪}
  | | | |     or (abs(c[[i]-c[k]))=abs(i-k)); {}
  | | | | i := i+ 1;
  | | | end;
  | | | danger := b;
  | | end;
  | end;
  |
  | function is_up: boolean {_ᢥ}
  | begin
  | | is_up := (k < n) and not danger;
  | end;
  |
  | function is_right: boolean {_ࠢ}
  | begin
  | | is_right := (k > 0) and (c[k] < n);
  | end;
  | { 訡:  k=0  । c[k]}
  |
  | function is_down: boolean {_᭨}
  | begin
  | | is_up := (k > 0);
  | end;
  |
  | procedure up; {_}
  | begin {k < n}
  | | k := k + 1;
  | | c [k] := 1;
  | end;
  |
  | procedure right; {ࠢ}
  | begin {k > 0,  c[k] < n}
  | | c [k] := c [k] + 1;
  | end;
  |
  | procedure down; {}
  | begin {k > 0}
  | | k := k - 1;
  | end;
  |
  | procedure work; {ࠡ}
  | | var i: integer;
  | begin
  | | if (k = n) and not danger then begin
  | | | for i := 1 to n do begin
  | | | | write ('<', i, ',' , c[i], '> ');
  | | | end;
  | | | writeln;
  | | end;
  | end;
  |
  | procedure UW; {__㯮__ࠡ}
  | begin
  | | while is_up do begin
  | | | up;
  | | end
  | | work;
  | end;
  |
  begin
  | begin_work;
  | UW;
  | while is_down do begin
  | | if is_right then begin
  | | | right;
  | | | UW;
  | | end else begin
  | | | down;
  | | end;
  | end;
  end.

     3.1.7. ਢ ணࠬ  쭮   ६
  믮  ஢ન  _ᢥ  (஢ઠ,  室  
孨   , ॡ ᫠ ⢨ 浪 n). -
 ॠ 権  ॢ 権 ⠪,  ⮡    
஢ન _ᢥ/ࠢ/᭨  ᮮ⢥騥  -
    ⢠ ⢨, ࠭祭  饩  n
⠭⮩.

     襭.   ⨪,  室饩    
室饩  㤥 ࠭ 㫥᪮ 祭 - ᢥ
 ⮬, 室   ⮩   (孨   -
).  (⨬,   ᨫ ⨬ 樨   
      .).

     3.2.  室 ॢ  㣨 .

     3.2.1. ᯮ짮 ⮤ 室 ॢ  襭  ᫥-
饩   :     ᨢ    n  楫  ⥫  ᥫ
a[1]..a[n]  ᫮ s; ॡ 㧭,    ᫮  s  
।⠢    㬬     ᥫ ᨢ a. (
᫮  ᯮ짮   祬   ࠧ.)

     襭. 㤥  k- ᫥⥫쭮   k
㫥᪨  祭,  ।,  室      㬬  ᫠
a[1]..a[k]   室.  ⨬, ᫨    㬬  
ॢ室 s.

     砭.  ࠢ   ॡ஬  (2  ⥯-
  n)     먣.  ⠪ ।-
⥫쭮 ஢ ᨢ a  뢠饬 浪,    ⠪
  ⨬묨    樨,   㬬 襭
童 , 祬 ࠧ 㬬   童    s.  ᫥
  뢠  "⮤  ⢥   ࠭".  ਭ樯쭮
襭  ࠢ   ॡ஬   砥 (
,  , NP-,  .  ஡      ,
  쬠 "஥   ᫨⥫ -
").  ࠤ樮    ⮩  - "  "
( 饩 㧮ꥬ s 㦭 㯠    離,
ᯮ  ।⠬    a[1]..a[n]).  .  ⠪   7
(ࠧ  ᪮ ணࠬ஢)      襭,
  n+s.

     3.2.2.  ᫨  ᫥⥫쭮  n 㫥, -
  ,    㯯       
ࠧ  ( ᪠  XX).

     3.2.3.  筠    ᫥⥫쭮⥩ 㫥 
,    㯯        ࠧ
 ( ᪠  XXX).

      ⮩  ⥣ਨ ⭮  ⨯ "  ᫮
 䨣  ⠬"   .       㬥
᮪饭  ॡ (६ ᯮ,  饥 ᯮ-
 䨣ப 㦥 ⨢ ॡ,   ⮩ ⢨  -
  த).
