Protected. fHead: pNode; // поле - указатель на начало списка узлов  

Protected. fHead: pNode; // поле - указатель на начало списка узлов

fHead: pNode; // поле - указатель на начало списка узлов

fNodesNumber: Word; // поле - количество узлов графа

fArcsNumber: Word; // поле - количество дуг графа

Public

property Head: pNode read fHead write fHead;

property NodesNumber: Word read fNodesNumber write fNodesNumber;

property ArcsNumber: Word read fArcsNumber write fArcsNumber;

function NodeValue(Node: pNode):tValue; // значение узла Node

function NodeAddr(v: tValue): pNode; // адрес узла графа со значением v

function ArcAddr(Node1,Node2: pNode):pArc; // смежность узлов

function HeadNode(ArcNode: pArc): pNode; // начальный узел дуги

function RearNode(ArcNode: pArc): pNode; // конечный узел дуги

function Empty: Boolean; // наличие узлов в графе

procedure AddArc(Node1,Node2: pNode); // включение дуги

procedure DeleteArc(Node1,Node2: pNode); // исключение дуги

procedure AddNode(v: tValue); // включение узла

function DeleteNode(DisNode:pNode): tValue; // исключение узла

procedure Build(var f:Text); // построение графа

procedure Revision(var f:Text); // просмотр графа

procedure Clear; // удаление всех узлов графа

constructor Create; // конструктор графа

destructor Destroy; // деструктор графа

end; // tOrGraph

4. Реализация основных операций над ориентированным графом

Вычисление адреса узла графа по значению его информационной части фактически представляет собой поиск этого узла в списке узлов:

function tOrGraph.NodeAddr(v: tValue): pNode; // адрес узла со значением v

Var

Node: pNode;

Begin

if fHead=nil

then NodeAddr:=nil

Else begin

Node:= fHead;

while (Node^.NextNodenil) and(Node^.Valuev) doNode:=Node^.NextNode;

if Node^.Value=v then NodeAddr:= Node else NodeAddr:= nil;

end;

end; // function tOrGraph.NodeAddr

Операция проверки смежности двух узлов возвращает значение «истина», если узлы смежны, и «ложь» в противном случае. При связанном представлении графа целесообразно возвращать адрес дуги, соединяющей узлы, если они смежны, и nil в противном случае. Перед использованием операции необходимо убедиться, что оба узла присутствуют в списке узлов графа.

function tOrGraph.ArcAddr(Node1,Node2: pNode): pArc;

// Проверка смежности узлов Node1 и Node2

Var

Arc :pArc;

Begin

ArcAddr:= nil; Arc:=Node1^.ArcList;

if Arcnil then begin // поиск узла Node2 в списке дуг узла Node1

while (Arc^.NextArcnil) and (Arc^.RearNodeNode2) do Arc:= Arc^.NextArc;

if Arc^.RearNode=Node2 then ArcAddr:= Arc;

end;

end; // function tOrGraph.ArcAddr

Операция определения начального узла дуги возвращает адрес узла, из которого выходит заданная дуга (дуга задается своим адресом). Перед применением операции необходимо убедиться, что дуга присутствует в одном из списков дуг графа.



function tOrGraph.HeadNode(ArcNode: pArc): pNode;

// Начальный узел дуги

Var

Node:pNode;

Arc :pArc;

Begin

Node:= fHead; HeadNode:=nil;


0877219631351064.html
0877273173831492.html
    PR.RU™