.


:




:

































 

 

 

 





 

, , . , . . , .

, . , . , . .

 

. , .

, .

 

, :

 

1. .

2. .

3. .

 

"-". , .

. , . , . , . , ( ).

 

, :

 

1. .

2. .

3. .

 

Visited TNode:

 

TNode=record

ID:integer; //

LinkSentinel:TLink; // ,

NextNode:PNode; //

Visited:boolean; //

end;

 

, , . .

 

procedure Traverse(node: PNode);

var

link: PLink;

neighbor: PNode;

begin

// .

Node^.Visited:= True;

// .

link:= node^.LinkSentinel.NextLink;

while (link<>nil) do

begin

// .

if (link^.Node1 = node) then neighbor:= link^.Node2

else neighbor:= link^.Nodel;

// ,

if (not neighbor^.Visited) then Traverse(neighbor);

//

Link:=link^.NextLink;

end;

end;

 

, . . , , . . 34 . .

 

 

 


. 34.

 

, . , . , , . , .

, , . , , , .

 

:

1. ( ) .

2. , :

- ;

- .

 

, , , . , .

, , . , . , . . 35 , . .

 
 

 


. 35. ,

, . . . , , . . , .

, , . , , .

. 36 , . . , F , , , F

 
 

 


. 36.

, . , .

, . . , .

, , . , . . . , , .

. TNode Dist, . Dist True, . Dist , .

TNode Status, , . InLink , .

 

type

TStatus=(nsNotInList, nsWasInList, nsNowInList);

 

TNode=record

ID:integer; //

LinkSentinel:TLink; // ,

NextNode:PNode; //

Status:TStatus; //

Dist:integer; //

InLink:PLink; // ,

end;

 

TLink InTree, , .

 

type

TLink=record

Node1: PNode; //

Node2: PNode; //

Cost:integer; //

NextLink:PLink; //

InTree:boolean; //

end;

 

, , , - . , . , , .

 

 

Status nsNotInList Dist INFINITY, . Dist 0 . Status nsNowInList - , .

Dist. , .

Status nsWasInList, . Dist InLink . InLink nil, Dist- .

, . , . Status nsNowInList, Dist - . , InLink , .

, , Status nsNowInList, . Dist , , . , InLink Dist . , , , .

. 37 . , . , , D . InLink . , InLink .

 


. 37.

, InLink Dist Status = nsNowInList. , , . , , , . , . . 38 , , .

 

 

 


. 38.

 





:


: 2017-02-25; !; : 819 |


:

:

.
==> ...

2020 - | 1886 -


© 2015-2024 lektsii.org - -

: 0.028 .