Студопедия

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

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

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






  • 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 :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.