      9.    

     9.1. 砩訥 

      ⮬ ࠧ ᬠਢ ࠧ ਠ  -
.   n த, ஭㬥஢ ᫠  1  n.
   த  ࠬ i, j  ⠡  a[i][j]  -
  楫 ᫮ - 業 אַ   த i  த
j. ⠥,  ३   묨 த, a[i,i]
= 0   i, a[i][j]  ⫨   a[j,i].  襩
⮨ ஥  i  j ⠥ 쭮  㬬
業  ⮢   ⮢ ( ⮬ ᫥  ᠤ), 
 i  j. (  ॢ室 a[i][j],    .)

      ।   ॡ   -
 ஥    த      -
祭  ᨢ a   ६ ࠡ ⬠.

     9.1.1.  ।,     ⮢,
  㬬 業 ⥫쭠. ,   ⮬  砥
  襩 ⮨ .

     襭.    n ᥣ ᮤন 横,  -
⮬   ᪠ । ⮢    n,  
 筮 ᫮.

       ᫥  ।,     ᫮
(⢨ 横  ⥫쭮 㬬) 믮.

     9.1.2.   ⮨ ஥  1- த 
 ⠫  ६ O(n  ⥯ 3).

     襭. 稬 १ (1,s,)   ⮨
஥  1  s  祬  k  ᠤ.    믮
⠪ ᮮ⭮襭:

    (1,s,k+1) = 襬  ᥫ (1,s,k) 
                     (1,i,k) + a[i][s] (i=1..n)

 ⬥砫 , ᪮ ⢥⮬   (1,i,n)  
 i=1..n.

     k:= 1;
     for i := 1 to n do begin x[i] := a[1][i]; end;
     {ਠ: x[i] := (1,i,k)}
     while k <> n do begin
     | for s := 1 to n do begin
     | | y[s] := x[s];
     | | for i := 1 to n do begin
     | | | if y[s] > x[i]+a[i][s] then begin
     | | | | y[s] := x[i]+a[i][s];
     | | | end;
     | | end
     | | {y[s] = (1,s,k+1)}
     | | for i := 1 to n do begin x[s] := y[s]; end;
     | end;
     | k := k + 1;
     end;

ਢ   뢠 ⬮ ᪮ ணࠬ-
஢,  ⬮ ठ - .

     9.1.3. ,  ணࠬ ⠭  ࠢ쭮,  ᫨
  ᨢ y,  ந   ᠬ ᨢ x
(  ணࠬ  宦 㪢 y  x  ⥬  㤠
⠢訥 譨 ப).

     襭. ਠ 㤥 ⠪:
     (1,i,n) <= x[i] <= M(1,i,k)

         襭    ⭮襭:  
   ६ O(n  ⥯ 3)   ⮨  -
 i->j    i,j (  ⮫쪮  i=1),     ᮪-
 ६ ࠡ  O(n  ⥯ 2). ࠢ,  ᫥  -
砥  ॡ, ⮡  業 a[i][j] 뫨 ⥫.

     9.1.4.   ⮨ ஥ i->j   i,j
 ६ O(n  ⥯ 3).

     襭.  k = 0..n १ (i,j,k)  稬  
⮨   i  j, ᫨  ⢥ ᠤ ࠧ-
襭 ᯮ짮 ⮫쪮 㭪  ࠬ   k. 

     A(i,j,0) = a[i][j],

     A(i,j,k+1) = min (A(i,j,k), A(i,k+1,k)+A(k+1,j,k))

(  ਠ  ᮮ⢥  ᯮ짮    ᯮ짮
㭪 k+1  ⢥ ᠤ筮; ⬥⨬,     祬
뢠   ࠧ).
       뢠 ⬮ .

     9.1.5.  ,      業 ⥫.  -
 ⮨ ஥ 1->i   i=1..n  ६  O(n  
⥯ 2).

     襭.   ࠡ ⬠  த 
뤥묨 ( 砫 - ⮫쪮 த 1,      -  ).  
⮬:

       뤥 த i ࠭    -
  1->i;  ⮬ ⭮,   ⨣  
, 室饬 ⮫쪮 १ 뤥 த;
       뤥 த i ࠭  -
  1->i,  ஬  ⢥ ஬ ᯮ-
 ⮫쪮 뤥 த.

     ⢮  뤥 த   ᭮ ᫥-
饣 砭: ᫨ ।   뤥  த  
,   ண ࠭ ᫮ 쭮,   ᫮ -
 ⨭ 襩 ⮨.  ᠬ  ,    
  ⪨  .  ᬮਬ   뤥 த 
⮬  - 㦥    ! ( ⢥ -
⥫쭮 業.)
      ࠭ த  뤥,    ᪮४-
஢ ଠ, ࠭  뤥 த.    ⮬
筮   ,    த  -
 㭪⮬ ᠤ,    ᤥ, ⠪  -
 ⮨ ஥   த  㦥 .
      ᠬ ⭮ ᯮᮡ ࠭ ⢠ 뤥-
 த ( 㫥᪮ )      த  
 뤥 ॡ ६ O(n).
       뢠 ⬮ .

     ᪠ 砩襣   ⢥ 
 ନ .  A -  業  ,  
B  -   業 㣮. ( ⠥,   
 ࠢ 0.)   ⨬    ᠤ,  -
祬  ᭠砫 ᠬ⮬  A,  ⥬ -  B. 쪮
 ਤ , ⮡   த i  த j?

     9.1.6. ,          筮
㫥   ந , ⮫쪮  㬬  
,   㬭 - 㬬.

     9.1.7. ,  ⠪ ࠧ ।  ந-
  樠⨢.

     9.1.8. ,    砩  ⭠
᫥ "᪮筮 ⥯"   業  A:    ᫥-
⥫쭮  A, A*A, A*A*A,...  , 稭  ண,
ࠢ ᪮  ⮨⥩ 砩 ⥩. (᫨  -
⥫ 横!)

     9.1.9.  稭       ࠭஢ -
⢮  ।饩 ?

     筮  (  ஢) 㬭  ⮦ 
 , ⮫쪮       㣨.  
   ३ (  ᫥饬 ࠧ),  ⮫쪮 ,
a[i,j]  ࠢ  1,  ᫨ ३ ,  0, ᫨ ३ . 
 a ( ࠧ)  ⥯ k  ᬮਬ   i-j-
.

     9.1.10.   ࠢ?

     ⢥.  ࠧ ᯮᮡ     i    j    k
३ᮢ.

     砩,      ३,  ᢥ  室,
 䨪⨢  ३    ᪮筮  让  (  筮
让)  ⮨.     ⠪ . ᫮
ॠ ३ᮢ   ⢥  n*n, ⮬ -
 ,  ࠡ 䥪⨢   ⠪  樨.
室    ⢥  ।⠢ ⮣  ⠪ ଥ:
  த ⭮ ᫮ 室    ३ᮢ,  
㭪 祭  業.

     9.1.11.  ,      -
 ⠪, ⮡  n த  k ⮢  ॡ  
C*(n+k log n) 権.
     .   ᤥ   蠣?   뤥-
 த  쭮 ⮨  ᪮४஢ 業 
  த,        . ᫨  -
ᮮ頫 ,   த ⮨ 쭠,   墠⨫
 C*(n+k) ⢨.  ঠ ᢥ  ⮬,  
  ᨢ    (.  6.4.1    ⨯ )
室   ⥫ log n.

     9.2. 吝 ,   㡨  ਭ

      ⮩ 砩   砩    -  ᫨
 業 ࠢ 0  ᪮. 㣨 ᫮,  㥬-
     i  j,   業  ⮨ ( 
  ).  㣨 ନ:    ਥ஢
 (⨭  祪,    ᮥ ५-
)    設, 㯭  .

       ⮣      砩  ਢ 
।饬 ࠧ  -  訥.  ᠬ , 
  ४ᨢ  ணࠬ  襭 ⮩  ਢ 
 7 (),  ४ᨢ -   6  (  ).
      ⠪ :   ᫨ 
設, 㯭  ,  ᫨     ।
浪.    -   ਭ   㡨.

       ਭ:  ᫨  設  ਥ஢-
 , 㯭  ,  浪 㢥祭  
 . ( ᠬ  訬   砩 ,  業
ॡ ࠢ 1  ᪮.)

     9.2.1.  ਤ㬠    襭  ⮩    ᫮
⢨   C*(᫮ ॡ, 室    
設).

     襭.      ᬠਢ   6 ( -
), 6.3.7 - 6.3.8.   ਢ ஡ 襭.  
num[i]  -  ⢮  ॡ,  室    i,  out[i][1],...,
out[i][num[i]] - 設, 㤠  ॡ.  ணࠬ,  -
񭭠 ࠭:

  procedure 㯭 (i: integer);
  |   {  設, 㯭  i,  i}
  | var  X: ⢮ 1..n;
  |      P: ⢮ 1..n;
  |      q, v, w: 1..n;
  |      k: integer;
  begin
  | ...ᤥ X, P 묨;
  | writeln (i);
  | ... i  X, P;
  | {(1) P = ⢮ ⠭ 設; P ᮤন i;
  |  (2) ⠭ ⮫쪮 㯭  i 設;
  |  (3) X - ⢮ P;
  |  (4)  ⠭ 設,   室
  |      ॡ  ⠭ 設, ਭ X}
  | while X  do begin
  | | ... -  X  v;
  | | for k := 1 to num [v] do begin
  | | | w := out [v][k];
  | | | if w  ਭ P then begin
  | | | | writeln (w);
  | | | |  w  P;
  | | | |  w  X
  | | | end;
  | | end;
  | end;
  end;

  뫮 ࠧ筮,    ⢠ X -
ࠥ. ᫨  㤥  X । ( 襫 - -
 襫),   ணࠬ ⠥  設, 㯭 
i,  浪 ⠭  ﭨ    i  (᫠  ॡ  
砩襬   i).  .

     稬  १ V(k) ⢮  設, ﭨ -
  i ( ᠭ ᫥) ࠢ k.   ⠪ ᮮ-
襭:

 V(k+1) = ( ॡ  砫  V(k))-V(0)-V(1)-...-V(k)

( "-" 砥 ⠭ ). ,   -
 k=0,1,2...  室 ࠡ ணࠬ 㤥 ⠪   (᫥
। 樨 横 while), 

      ।    V(k)  ⮫쪮 
     ⠭   V(1),...,V(k)

(  k=0  -  ﭨ । 横.) 㦤  樨,
।,   । ᪮   V(k).   -
  ᬠਢ    横,     (᪮ 
   ,   ६    묨).
     ॡ, ᫨  㦥  ⠭, -
  ⠢  । -        ᠭ  
ᮮ⭮襭  V(k+1).         -
,  ।     V(k+1).

       㡨.

     ᬠਢ   㡨, 㤮 ।⠢ ᥡ -
஢   ࠧ ॢ.  筮,    -
஢ ,   設 ண 뤥. 㤥 -
,    設 㯭  뤥  ਥ஢
. ந ॢ, ஥  뫮     "㭨-
ᠫ  ⨥"  襣  .   ୥ 㤥 뤥
設 .   室   ५,       -
      뭮ﬨ .    ॢ 室  
५,      ⠪ .   䮬  -
    ⮬,    , 騥      設, 
ॢ "᪫".  㣨 ନ: 設 ॢ -  
 , 室騩  .  뭮 -  , த
  ॡ. ⨬,  ॢ ᪮筮, ᫨   
ਥ஢ 横.
       ⢥  ⮡ࠦ  ॢ    (設 
設).  ⮬  設    ⮫쪮  ம-
,  ᪮쪮 ⥩   . ⮬ 室 ॢ (饭
 設  ⮬   浪) ६   -
  - ⮫쪮  設 頥 ⭮.

     㤥 ।,    設   室騥
    ॡ  㯮冷祭 (ନ, ஭㬥஢).  ᠬ
  設 ॢ 室騥   ॡ ⠪  㯮冷-
祭.  㤥 室 ॢ ⠪: ᭠砫 ७,  ⮬ -
ॢ ( 浪        ॡ).    室  ॢ
ᬠਢ      ४ᨨ.  ᮮ⢥ 室
. ᫨ 모  ⮣ 室  饭 㦥 -
饭 設,   ,  뢠 "  㡨-
".

     㣨 ᫮:  , 室  뤥 設,
 冷:  । ᢮ த;  ᫨  
  室   ன 設,  訬 ⠥ ,
 室    襬 ॡ. 設 ⥯  㯮-
稢  ᮮ⢥⢨  묨 ﬨ,   騬.
室 設   㪠 浪 뢠 ᪮  -
.

     9.2.2.  ணࠬ ᪠  㡨.
     .  쬥  ணࠬ 室 ॢ (७ - 
ॢ - ࠢ ॢ)    ४ᨨ     ࠢ
  ࠭  ४ᨨ   ᯮ㥬  ਬ⥫쭮  -
⥫⢠.  :    設  -
.    ᫨    㦥 饭 設,   
 祣  . (᫨     ।    
  設,         த   - 
ᬠਢ  ).

     砭.    ࠭ ४ᨨ 
ணࠬ 室 ॢ.  ࠭  ⥪ ୨  
饭  ॢ쥢  (       ࠭
४ᨨ).   ਬ ⮤    室 ॢ, 
 ॠ 樨  "_",  "ࠢ"    "".
⮡  ॠ, 室 ࠭  ⥪    
⥪饩  設.  ᯮᮡ - ਬ୮  ᫮, 
 ⭮ 樨         㤮-
.

       㡨   ᭮  ⬮  ,
ன  ᪮쪮 ஢ .

      9.2.3. ਥ஢  뢠 㤮,  ᫨
       梥 ⠪,    ॡ -
ࠧ 梥. ⠢  ஢ન,   
 㤮 (᫮ ⢨  ஢室 C*(᫮ ॡ  +
᫮ 設).

     .  ()  吝   訢
⤥쭮. () ࠢ 梥  設  室  吝 -
,  ।塞 ⢥  梥 ⠫.

     砭.    ⮩  ࠧ筮, ந  
ਭ   㡨.

     9.2.4. ⠢ ४ᨢ  ⮯᪮ -
஢  ਥ஢    横. (.  7.4.2 
  ४ᨨ.)

     襭.  ।,       設  ࠬ
1..n,   設 i ⭮ ᫮  num[i]  室  
 ॡ   設 dest[i][1],..., dest[i][num[i]],  -
  ॡ . 㤥 ᫮ ,  ॡ -
 "᫥ ࠢ":   ॡ,  ண    .
    設  ⠪ 浪, ⮡  -
 ॡ  ⠭ ।  砫.  ।, 
   ਥ஢ 横 -  ⠪ .
       砫    設 0,  ன ॡ -
  設 1,...,n. ᫨  㤠    ᮡ
ࠢ,  ⥬ ᠬ  設  ⠭.

        ࠭ , 室騩  㫥 設  -
騩  ॡࠬ . ६ l ⢮   ⮣  -
.    ࠧ  設  vert[1],..., vert[l]  ॡࠬ,
騬  edge[1]...edge[l].  edge[s] ⭮  -
樨 ॡ, 室  設 vert[s].  ᠬ   
s  믮 ࠢ⢮
        edge[s] <= num[vert[s]]
 ࠢ⢮
        vert[s+1] = dest [vert[s]] [edge[s]]
祬,    ᫥  ॡ  ᤥ ᪫祭, ࠧ訢
 㪠뢠 " ",  ..  ࠧ訬
edge[l] ࠢ num[vert[l]]+1.

         ࠡ   㤥   設,
 ⮬ ᮡ ॡ "設  ⠭  ⮫쪮  ᫥
 設,      ॡ". , 㤥 믮-
 ⠪ ॡ:

()     設  , ஬ ᫥ (.. vert[1]..vert[l])
         ⠭,  ᢥ   ,  
        㯨ࠥ  ⠭ 設

  砥:

        l:=1; vert[1]:=0; edge[1]:=1;
        while not( (l=1) and (edge[1]=n+1)) do begin
        | if edge[l]=num[vert[l]]+1 then begin
        | | { 砥  , ⮬  設,
        | |     ᫥騥  vert[l], ⠭ - 
        | |      vert[l]}
        | | writeln (vert[l]);
        | | l:=l-1; edge[l]:=egde[l]+1;
        | end else begin
        | |  {edge[l] <= num[vert[l]],  砥 
        | |     設}
        | |  lastvert:= dest[vert[l]][edge[l]]; {᫥}
        | |  if lastvert ⠭ then begin
        | |  | edge[l]:=edge[l]+1;
        | |  end else begin
        | |  | l:=l+1; vert[l]:=lastvert; edge[l]:=1;
        | |  end;
        | end;
        end;
        { ࠧ    , ⮬  設
         ,   1..n, ⠭}

     9.2.4. ,  ᫨    横,   -
 稢 ࠡ.

     襭.    ⠪.  設   
⮫쪮   ࠧ, ⠪   ண  設  -
.    横   ࠭祭 (設  -
 室 ), ⮬  ,      
,  ᫥  ண    㤫. ᫥ ⮣ 
ࠧ  㢥稢 edge[l] -     ।쭮.
