ЛАБОРАТОРНАЯ РАБОТА №18 Тема: Разработка алгоритмов и программ с использованием алгоритмов на графах
Цель:Сформировать умения разрабатывать алгоритмы и программы с использованием алгоритмов на графах
Программное обеспечение: TURBO PASCAL 7.1
Оснащение:персональный компьютер, практикум
Время проведения: 2 уч. часа
Литература:
Павловская Т.А. Паскаль. Программирование на языке высокого уровня. Учебник для вузов. СПб.: Питер, 2008.
ВОПРОСЫ ВХОДНОГО КОНТРОЛЯ:
1. Сформулируйте определение размещения.
2. Сформулируйте определение сочетания.
3. Приведите примеры комбинаторных алгоритмов.
КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Граф – это нелинейная многосвязная динамическая структура, отображающая свойства и связи сложного объекта.
Многосвязная структура обладает следующими свойствами:
- на каждый элемент (узел, вершину) может быть произвольное количество ссылок;
- каждый элемент может иметь связь с любым количеством других элементов;
- каждая связка (ребро, дуга) может иметь направление и вес.
В узлах графа содержится информация об элементах объекта. Связи между узлами задаются ребрами графа. Ребра графа могут иметь направленность, показываемую стрелками, тогда они называются ориентированными, ребра без стрелок – неориентированными.
Граф, все связи которого ориентированные, называется ориентированным графом или орграфом; граф со всеми неориентированными связями – неориентированным графом; граф со связями обоих типов – смешанным графом. Неориентированные связи приведены на рисунке 18.1 а, а ориентированные – на рисунке 18.1 б.
Рисунок 18.1 ― Графы: а – неориентированный и б –ориентированный
Для ориентированного графа число ребер, входящих в узел, называется полустепенью захода узла, выходящих из узла – полустепенью исхода. Количество входящих и выходящих ребер может быть любым, в том числе и нулевым. Граф без ребер является нуль-графом.
Если ребрам графа соответствуют некоторые значения, то граф и ребра называются взвешенными. Мультиграфом называется граф, имеющий параллельные (соединяющие одни и те же вершины) ребра, в противном случае граф называется простым.
Путь в графе – это последовательность узлов, связанных ребрами. Элементарным называется путь, в котором все ребра различны. Простым называется путь, в котором все вершины различны. Путь от узла к самому себе называется циклом, а граф, содержащий такие пути, – циклическим.
Два узла графа смежны, если существует путь от одного из них до другого. Узел называется инцидентным к ребру, если он является его вершиной, т. е. ребро направлено к этому узлу.
Логически структура-граф может быть представлена матрицей смежности или матрицей инцидентности.
Матрицей смежности для n узлов называется квадратная матрица adj порядка n. Элемент матрицы a(i, j) равен 1, если узел j смежен с узлом i (есть путь < i, j >), и 0 – в противном случае (рис. 18.2).
Рисунок 18.2 ― Граф и его матрица смежности
Если граф неориентирован, то a(i, j) = a(j, i), т. е. матрица симметрична относительно главной диагонали.
Матрицы смежности используются при построении матриц путей, дающих представление о графе по длине пути: путь длиной в 1 – смежный участок, путь длиной 2 – (< A,B >,< B,C >), ... в n смежных участков, где n – максимальная длина, равная числу узлов графа. На рисунке 18.3 даны путевые матрицы пути adj2, adj3, adj4 для графа рисунке 18.2.
Рисунок 18.3 ― Матрицы путей
Матрицы инцидентности используются только для орграфов. В каждой строке содержится упорядоченная последовательность имен узлов, с которыми данный узел связан ориентированными (исходящими) ребрами. На рисунке 18.4 показана матрица инцидентности для графа на рисунке 18.2.
Рисунок 18.4 ― Матрицы инцидентности
Машинное представление оpгpафов
Существуют два основных метода представления графов в памяти ЭВМ: матричный, т.е. массивами, и связными нелинейными списками. Выбор метода представления зависит от природы данных и операций, выполняемых над ними. Если задача требует большого числа включений и исключений узлов, то целесообразно представлять граф связными списками, в противном случае можно применить и матричное представление.
Матричное представление орграфов
При использовании матриц смежности их элементы представляются в памяти ЭВМ элементами массива. При этом, для простого графа матрица состоит из нулей и единиц, для мультиграфа – из нулей и целых чисел, указывающих кратность соответствующих ребер, для взвешенного графа – из нулей и вещественных чисел, задающих вес каждого ребра.
Например, для простого ориентированного графа, изображенного на рисунке 18.2, массив определяется как:
mas:array[1..4,1..4]=((0,1,0,0),(0,0,1,1), (0,0,0,1),(1,0,1,0))Матрицы смежности применяются тогда, когда в графе много связей и матрица хорошо заполнена.
Связное представление орграфов
Орграф представляется связным нелинейным списком, если он часто изменяется или если полустепени захода и исхода его узлов велики. Рассмотрим два варианта представления орграфов связными нелинейными списковыми структурами.
В первом варианте два типа элементов – атомарный и узел связи. На рис. 5 показана схема такого представления для графа на рисунке 18.2. Скобочная запись связей этого графа:
(< A,B >,< B,C >,< C,D >,< B,D >,< D,C >)Рисунок 18.5 ― Машинное представление графа элементами двух типов
Более рационально представлять граф элементами одного формата, двойными: атом-указатель и указатель-указатель или тройными: указатель-data/down-указатель. На рисунке 18.6 тот же граф представлен элементами одного формата.
Рисунок 18.6 ― Машинное представление графа однотипными элементами
Многосвязная структура – граф – находит широкое применение при организации банков данных, управлении базами данных, в системах программного иммитационного моделирования сложных комплексов, в системах исскуственного интеллекта, в задачах планирования и в других сферах.
В качестве примера приведем программу, находящую кратчайший путь между двумя указанными вершинами связного конечного графа.
МЕТОДИЧЕСКИЕ УКАЗАНИЯ
{Алгоритм Дейкстры}Program Example_1;Const n=5; max=10000;Vara: Array [1..n,1..n] of Integer; v0,w,edges: Integer; from,tu,length: Array [1..n] of Integer;Procedure adjinit;{эта пpоцедуpа задает вес pебеp гpафа посpедством опpеделения его матpицы смежности A pазмеpом N x N }Var i,j: Integer;Begin{"обнуление" матpицы (веpшины не связаны)} For i:=1 to n do For j:=1 to n do a[i,j]:=max; For i:=1 to n do a[i,i]:=0;{задание длин pебеp, соединяющих смежные узлы гpафа} a[1,2]:=12; a[1,3]:=18; a[1,4]:=10; a[2,1]:=12; a[2,3]:=6; a[2,5]:=9; a[3,1]:=18; a[3,2]:=6; a[3,4]:=7; a[3,5]:=3; a[4,1]:=10; a[4,3]:=7; a[4,5]:=15; a[5,2]:=9; a[5,3]:=3; a[5,4]:=15;end;Procedure printmat;{эта пpоцедуpа выводит на экpан дисплея матpицу смежности A взвешенного гpафа}Vari,j: Integer;Beginwriteln; writeln('Матpица смежности взвешенного гpафа (',n,'x',n,'):'); writeln; For i:=1 to n do Begin write ('Е'); For j:=1 to n do If a[i,j]=max Then write(' ----') Else write(a[i,j]:6); writeln(' Е')End; writeln; writeln (' ("----" - pебpо отсутствует)')end;Procedure dijkst;СОДЕРЖАНИЕ РАБОТЫ:Написать программу с использованием алгоритма обхода графа в глубину.
ВОПРОСЫ ВЫХОДНОГО КОНТРОЛЯ:
1. Сформулируйте определение графа.
2. Перечислите виды графов.
3. Приведите примеры алгоритмов для работы с графами.
ДОМАШНЕЕ ЗАДАНИЕ
Выучить алгоритмы с применением графов.