Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






While Node<>nil do begin






Arc: =Node^.ArcList;

If Arc< > nil then begin

while (Arc^.NextArc< > nil) and (Arc< > ArcNode) do Arc: = Arc^.NextArc;

if Arc=ArcNode then begin HeadNode: =Node; Break; end;

end;

Node: = Node^.NextNode;

end;

end; // function tOrGraph.HeadNode

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

procedure tOrGraph.AddArc(Node1, Node2: pNode);

// Включение дуги между узлами Node1 и Node2

Var

Arc: pArc;

Begin

Arc: =ArcAddr(Node1, Node2);

if Arc= nil

Then begin

Arc: =New(pArc); Arc^.NextArc: =Node1^.ArcList;

Arc^.RearNode: =Node2; Node1^.ArcList: =Arc; Inc(fArcsNumber); end

else Writeln('Узлы ', Node1^.Value, ' и ', Node2^.Value, ' уже соединены дугой');

end; // procedure tOrGraph.AddArc

Исключение дуги между двумя заданными узлами, если она есть. Оба узла должны присутствовать в списке узлов графа.

procedure tOrGraph.DeleteArc(Node1, Node2: pNode);

// Исключение дуги между узлами Node1 и Node2, если она есть

Var

Arc, PrevArc: pArc;

Begin

Arc: =Node1^.ArcList; // адрес начала списка смежности узла Node1

If Arc< > nil

then begin // если список дуг узла Node1 не пуст

PrevArc: = nil; // адрес дуги, предшествующей исключаемой

While (Arc^.RearNode< > Node2) and (Arc^.NextArc< > nil) do begin

PrevArc: =Arc; Arc: = Arc^.NextArc;

end;

if Arc^.RearNode=Node2 // если есть дуга, входящая в узел Node2

then begin // удаление

if PrevArc= nil

then Node1^.ArcList: = Arc^.NextArc // удаляется первая дуга

else PrevArc^.NextArc: = Arc^.NextArc; // удаляется не первая дуга

Dispose(Arc); Dec(fArcsNumber);

End

else WriteLn('Исключаемая дуга отсутствует');

End

else WriteLn('Исключаемая дуга отсутствует');

end; // procedure tOrGraph.DeleteArc

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

procedure tOrGraph.AddNode(v: tValue);

// Включение узла со значением v в граф

Var

NewNode: pNode;

Begin

if NodeAddr(v)= nil






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.