Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2_SAOD_-_Dinamicheskie_struktury_dannykh.doc
Скачиваний:
120
Добавлен:
21.03.2016
Размер:
1.66 Mб
Скачать

Лабораторная работа 4. Ориентированные графы

Задание

Опишите класс – ориентированный граф, необходимый для решения задачи, указанной в вашем варианте задания, и реализуйте его методы. Составьте программу решения задачи, указанной в вашем варианте задания. В программе необходимо продемонстрировать работу основных методов работы с графом: построение, вывод, просмотр (т.е. программа должна иллюстрировать работу с графом как в примере выполнения задания).

Исходный граф может содержать петли и циклы.

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

Варианты заданий

  1. Определить кратчайший путь между узлами n1 иn2 и его длину во взвешенном графе.

  2. Определить, является ли один граф подграфом другого.

  3. Задана карта дорог в виде графа. Найти города, расположенные на расстоянии более Xот заданного узла.

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

  5. Найти все узлы графа, к которым можно добраться из заданного узла.

  6. Определить кратчайший путь между узлами n1 иn2 и его длину во взвешенном графе.

  7. Определить, является ли ориентированный граф несвязным.

  8. Составить список узлов, расстояние от которых до заданного узла не превышает величину X.

  9. Определить, является ли один граф суграфом другого.

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

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

  12. Определить расстояние между узлами n1 иn2 во взвешенном циклическом графе.

  13. Определить, является ли один граф частью другого.

  14. На основе обхода в ширину найти все узлы заданного графа, недостижимые из заданного узла.

  15. На основе поиска в ширину определить, является ли граф несвязным.

  16. Перечислить узлы графа по возрастанию расстояния до них от заданного узла.

  17. Реализовать граф с помощью двусвязных списков (включение и исключение узла).

  18. Задана карта дорог в виде графа. Найти города, расположенные на расстоянии Xот заданного узла.

  19. На основе обхода в ширину найти узел с заданным значением в графе и исключить его.

  20. Найти узел графа, ближайший к заданному злу.

  21. На основе поиска в ширину определить, является ли граф связным.

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

  23. Найти все циклы в графе.

  24. Определить, является ли один граф дополнением другого.

  25. Задана карта дорог в виде графа. Найти города, расположенные на расстоянии не более Xот заданного узла.

  26. На основе обхода в глубину найти все узлы заданного графа, недостижимые из заданного узла.

  27. Определить, является ли граф полным.

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

  29. Определить длины всех путей между узлами n1 иn2 в невзвешенном графе.

  30. Найти узел графа, наиболее удаленный от заданного узла.

Пример выполнения задания

Программа 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.