Пример выполнения задания. Граф G1 Граф G2




Построить дерево поиска с элементами – символами. Используя операции Locate, Father, Value и Delete, найти узел, являющийся отцом узла с заданным значением, вывести значение найденного узла и исключить его из дерева. Вывести дерево с помощью отступов, результаты его обхода слева направо и число узлов дерева (до и после исключения узла). Класс дерева поиска содержатся в модуле BinTrees.

// Лабораторная работа 3. Бинарные деревья.

// Выполнил Сергеев Андрей, группа 500.

// Работа с деревом поиска.

// Исходные данные - элементы дерева - в файле LW3Dat.txt

// Результаты работы помещаются в файл LW3Res.txt

program LW3;

{$APPTYPE CONSOLE}

uses SysUtils, BinTrees in 'BinTrees.pas';

Var

SearchTree: tSearchTree; // динамический экземпляр дерева поиска

fDat, fRes: Text; // файлы исходных данных и результатов

Item, FathItem: pItem; // указатели на узел дерева и на отца узла

v: tValue; // значение узла дерева

Begin

Try

Assign(fDat, ‘LW3Dat.txt'); Reset(fDat);

Assign(fRes,'LW3Res.txt'); Rewrite(fRes);

// создание экземпляра SearchTree класса tSearchTree

SearchTree:= tSearchTree.Create;

SearchTree.Build(fDat); // построение дерева поиска

WriteLn(fRes, 'Работа с деревом поиска');

WriteLn(fRes, 'Поиск и удаление отца заданного элемента дерева');

WriteLn(fRes, 'Построено дерево с числом узлов ',SearchTree.Size,':');

SearchTree.WriteTo(fRes); // вывод исходного дерева поиска

Write(fRes, 'Обход дерева слева направо:');

SearchTree.LeftRightRevision(fRes); // обход дерева слева направо

Write(WinDos('Для какого элемента нужно найти отца?'));

ReadLn(v);

WriteLn(fRes, 'Нужно найти отца для элемента ', v);

Item:= SearchTree.Addr(v); // поиск узла со значением v

if Item= nil

then WriteLn(fRes,'Элемента с ключом ',v,' в дереве нет.')

Else begin

FathItem:= SearchTree.Father(Item); // адрес отца узла со значением v

if FathItem= nil

then WriteLn(fRes,'Заданный элемент не имеет отца.')

else begin // если у заданного элемента есть отец

v:= SearchTree.Value(FathItem);

WriteLn(fRes, 'Значение отца заданного элемента = ', v);

SearchTree.Delete(v); // исключение отца узла

WriteLn(fRes,'Состояние дерева после исключения:');

SearchTree.WriteTo(fRes); // вывод дерева поиска после исключения

WriteLn(fRes, 'Обход дерева слева направо:');

SearchTree.LeftRightRevision(fRes); // обход дерева поиска слева направо

WriteLn(fRes,'Число узлов дерева:', SearchTree.Size);

end;

end;

SearchTree.Free;

Finally

Close(fDat); Close(fRes);

end;

end.

Тема 4. Графы

 

1. Основные понятия и определения

Граф состоит из множества узлов и множества дуг. Каждая дуга в графе указывается парой узлов. Примеры графов:

Граф G 1 Граф G 2

Для графа G 1 множество узлов – { A, B, C, D, E, F, G, H }, множество дуг – {(A, B), (A, D), (A, C), (C, D), (C, F), (E, G), (A, A)}. Дуга, соединяющая узел с самим собой, называется петлей. Узел может не иметь связанных с ним дуг (узел H графа G 2). Если пары узлов, образующих дугу, упорядочены, то граф называют ориентированным, или направленным, графом (граф G 2 – ориентированный); дуги в этом случае изображают стрелками. В этой теме мы будем рассматривать только ориентированные графы без петель.

Узел n называется инцидентным дуге x, если n – это один из двух узлов упорядоченной пары, составляющей дугу x (говорят также, что дуга x инцидентна узлу n). Степень узла – это число дуг, инцидентных узлу. Полустепень захода узла – это число дуг, входящих в узел, а полустепень исхода узла – это число дуг, выходящих из узла. Например, узел C графа G 2 имеет полустепень захода 2, полустепень исхода 1 и степень 3. Узел n называется смежным с узлом m, если существует дуга из m в n.

Часть графа – это граф, содержащий часть узлов исходного графа и часть (любую) его дуг.

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

Суграф содержит все узлы исходного графа и часть его дуг.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-26 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: