.


:




:

































 

 

 

 


-




, : -, , -, N-1 (N - ).

.

procedure step(v,k: byte; r: longint);var j: byte;begin if r < min then if k = N-1 then min:= r else for j:= 1 to N do if (sm[v,j]<>0)and(mark[j]=0) then begin mark[j]:= 1; step(j,k+1,r+sm[v,j]); mark[j]:= 0 end;end;begin... for i:= 1 to N do mark[i]:= 0; min:= MaxLongInt; for i:= 1 to N do begin mark[i]:=1; step(i,1,0); mark[i]:=0; end; writeln(min);...end.

 

, , .

-

, " " , - . "" , "" - . t .

sm, mark . , " " , -, mark , - :

procedure rasst(v: byte; r: longint);var i: byte;begin if v = t then if r< min then min:= r else else for i:= 1 to N do if (mark[i]=0)and(sm[v,i]<>0) then begin mark[i]:=1; rasst(i,r+sm[v,i]); mark[i]:=0 endend;begin... for i:= 1 to N do mark[i]:= 0; min:= MaxLongInt; mark[s]:= 1; rasst(s,0); mark[s]:= 0;...end.

, , -, , , s t, .

dist s . MaxLongInt, "". , .

done , , ( ) .

last .

, . N-1 .

s s, , 0. , - . :

dist[s]:= 0; done[s]:= true; last:= s;

N-1 :

, last, :

dist[x]:= min(dist[x], dist[last]+ sm[last,x]);

dist: last;

done.

 

dist[s]:= 0; done[s]:= true; last:= s;for i:= 1 to N-1 do begin for x:= 1 to N do if (sm[last,x]<>0)and(not done[x]) then dist[x]:= min(dist[x],dist[last]+ sm[last,x]); min_dist:= MaxLongInt; for x:= 1 to N do if (not done[x])and(min_dist>dist[x]) then begin min_dist:= dist[x]; last:= x; end; done[last]:= true; end.

 

: :

― :

― -;

― .

― :

― -;

― .

 

:

1. .

2. .

-, , - .






:


: 2016-10-06; !; : 493 |


:

:

, , . , .
==> ...

1540 - | 1380 -


© 2015-2024 lektsii.org - -

: 0.007 .