
- •Федеральное агентство по образованию
- •Тема 3. Бинарные деревья 41
- •Тема 4. Графы 66
- •Введение
- •Терминология
- •Классификация структур данных по различным признакам
- •Типовые операции над структурами данных
- •Эффективность алгоритмов. O-обозначения
- •Тема 1. Стеки, очереди, деки
- •Операции над стеком
- •Реализация стека
- •Реализация основных операций над стеком
- •Использование стека для преобразования форм записи выражений.
- •Очередь
- •Операции над очередью
- •Операции над деком
- •Реализация очереди и дека
- •Реализация основных операций над очередью и деком
- •Итератор
- •Лабораторная работа 1. Стеки, очереди, деки
- •Тема 2. Односвязные и двусвязные линейные списки
- •Линейный список
- •Операции над линейным списком
- •Реализация линейного списка в виде односвязной динамической структуры
- •Реализация основных операций над односвязным списком
- •Циклический список
- •Операции над циклическим списком
- •Односвязная реализация циклического списка
- •Реализация основных операций над односвязным циклическим списком
- •Реализация линейного списка в виде двусвязной динамической структуры
- •Реализация основных операций над двусвязным списком
- •Циклический двусвязный список
- •Реализация основных операций над двусвязным циклическим списком
- •Лабораторная работа 2. Односвязные и двусвязные линейные списки
- •Тема 3. Бинарные деревья
- •Основные понятия и определения
- •Построение бинарного дерева
- •Операции над бинарным деревом
- •Реализация бинарного дерева
- •Реализация основных операций над бинарным деревом
- •Дерево выражения
- •Дерево поиска
- •Операции над деревом поиска
- •Реализация дерева поиска
- •Реализация операций над деревом поиска
- •Сбалансированные деревья
- •Включение в сбалансированное дерево
- •Лабораторная работа 3. Бинарные деревья
- •Тема 4.Графы
- •Основные понятия и определения
- •Граф g7
- •Операции над графом
- •Реализация графа
- •Реализация основных операций над ориентированным графом
- •Обход ориентированного графа
- •Вычисление расстояния между узлами ориентированного графа
- •Лабораторная работа 4. Ориентированные графы
- •Библиографический список
Лабораторная работа 4. Ориентированные графы
Задание
Опишите класс – ориентированный граф, необходимый для решения задачи, указанной в вашем варианте задания, и реализуйте его методы. Составьте программу решения задачи, указанной в вашем варианте задания. В программе необходимо продемонстрировать работу основных методов работы с графом: построение, вывод, просмотр (т.е. программа должна иллюстрировать работу с графом как в примере выполнения задания).
Исходный граф может содержать петли и циклы.
Если требуется реализовать граф с помощью циклического или двусвязного списка, то в число обязательных операций должны быть включены: построение, обход, очистка графа и операции, необходимые для их реализации. Специальные для каждого задания операции указаны в скобках.
Варианты заданий
Определить кратчайший путь между узлами n1 иn2 и его длину во взвешенном графе.
Определить, является ли один граф подграфом другого.
Задана карта дорог в виде графа. Найти города, расположенные на расстоянии более Xот заданного узла.
Реализовать граф с помощью односвязных циклических списков (включение и исключение узла).
Найти все узлы графа, к которым можно добраться из заданного узла.
Определить кратчайший путь между узлами n1 иn2 и его длину во взвешенном графе.
Определить, является ли ориентированный граф несвязным.
Составить список узлов, расстояние от которых до заданного узла не превышает величину X.
Определить, является ли один граф суграфом другого.
Реализовать граф с помощью односвязных циклических списков (определение начального и конечного узлов каждой дуги).
Найти все узлы графа, из которых можно добраться до заданного узла.
Определить расстояние между узлами n1 иn2 во взвешенном циклическом графе.
Определить, является ли один граф частью другого.
На основе обхода в ширину найти все узлы заданного графа, недостижимые из заданного узла.
На основе поиска в ширину определить, является ли граф несвязным.
Перечислить узлы графа по возрастанию расстояния до них от заданного узла.
Реализовать граф с помощью двусвязных списков (включение и исключение узла).
Задана карта дорог в виде графа. Найти города, расположенные на расстоянии Xот заданного узла.
На основе обхода в ширину найти узел с заданным значением в графе и исключить его.
Найти узел графа, ближайший к заданному злу.
На основе поиска в ширину определить, является ли граф связным.
Реализовать граф с помощью односвязных циклических списков (включение и исключение дуги, определение количества узлов).
Найти все циклы в графе.
Определить, является ли один граф дополнением другого.
Задана карта дорог в виде графа. Найти города, расположенные на расстоянии не более Xот заданного узла.
На основе обхода в глубину найти все узлы заданного графа, недостижимые из заданного узла.
Определить, является ли граф полным.
Найти все узлы графа, к которым можно добраться из заданного узла по пути не длиннее заданного значения.
Определить длины всех путей между узлами n1 иn2 в невзвешенном графе.
Найти узел графа, наиболее удаленный от заданного узла.
Пример выполнения задания
Программа LW4иллюстрирует выполнение основных операций над ориентированным графом. Предполагается, что описание класса – графа и реализация его методов содержатся в модулеGraphs.tpu.
Файл с исходными данными LW4Dat.txtсодержит информацию о следующем графе:
Множество узлов – {A,B,C,D,E,F}, множество дуг – {(A,B), (A,D), (B,C), (C,A), (C,D), (D,E), (E,C), (E,F), (F,C)}.
После построения в граф включаются узел Xи дуга между узламиFиX, затем исключается узелE. После каждого изменения графа выполняются его обход и вывод.
// Лабораторная работа 4. Ориентированные графы.
// Выполнил Сергеев Андрей, группа 500.
// Исходные данные - узлы и дуги графа - в файле LW4Dat.txt
// Результаты работы помещаются в файл LW4Res.txt
programLW4;
{$APPTYPE CONSOLE}
uses
SysUtils,
Graphs in 'Graphs.pas';
var
Graph : tOrGraph; // экземпляр ориентированного графа
fDat, fRes : Text;// файлы исходных данных и результатов
Node1,Node2: pNode;// вспомогательные указатели на узлы графа
v1,v2 : tValue;// значения элементов графа
begin
try
Assign(fDat, ‘LW4Dat.txt'); Reset(fDat);
Assign(fRes,'LW4Res.txt'); Rewrite(fRes);
WriteLn(fRes, 'Работа с графом');
Graph := tOrGraph.Create;// создание экземпляра графа
Graph.Build(fDat);// построение графа
Graph.Revision(fRes);// просмотр графа и вывод элементов в файл fRes
WriteLn(fRes,'Число узлов графа: ',Graph.NodesNumber);
WriteLn(fRes,'Число дуг графа: ',Graph.ArcsNumber);
// Включение узла со значением 'X'
v1:='X'; WriteLn(fRes, 'Значение включаемого элемента = ',v1);
Graph.AddNode(v1);
Graph.Revision(fRes);
// Включение дуги между узлами 'F' и 'X'
v1:='F';v2:='X';
WriteLn(fRes, 'Включается дуга между узлами ', v1,' и ',v2);
Node1:=Graph.NodeAddr(v1);
Node2:=Graph.NodeAddr(v2);
if (Node1<>nil) and (Node2<>nil) then Graph.AddArc(Node1,Node2);
Graph.Revision(fRes);// просмотр графа
// Исключение узла 'E' с инцидентными ему дугами
v1:='E';
WriteLn(fRes, 'Исключается узел ',v1);
Node1:=Graph.NodeAddr(v1);
if Node1<>nil then Graph.DeleteNode(Node1); Graph.Revision(fRes);
Graph.Free;
finally
Close(fDat); Close(fRes);
end;
end.