ГРАФЫ и алгоритмы на графах.ppt
- Количество слайдов: 33
ГРАФЫ и алгоритмы на графах
ОПРЕДЕЛЕНИЯ Граф – это конечная совокупность вершин, некоторые из которых соединены ребрами. Если ребро соединяет вершину саму с собой, то такое ребро называют петлёй. Две различные вершины графа, соединённые ребром, называют смежными. Если ребер, соединяющих вершину, более одной, то говорят, что задан мультиграф. Ребра, соединяющие одну и ту же вершину, называются кратными. Вершина графа называется инцидентной данному ребру, если она является одним из концов этого ребра. В этом случае ребро также инцидентно данной вершине. Количество рёбер, инцидентных данной вершине, называют степенью вершины. Степень вершины a будем обозначать (a) a (a) =2 b (b) =4 Для петли будем считать, что это ребро выходит из вершины дважды.
ПРОСТЕЙШИЕ СВОЙСТВА ГРАФОВ 1. Сумма степеней всех вершин графа равна удвоенному числу его рёбер. Если подсчитывается сумма степеней всех вершин, то каждое ребро в этой сумме фигурирует ровно два раза. Следствие: Для любого графа количество вершин нечётной степени всегда чётно. Лемма о рукопожатиях: В любой момент времени количество людей, сделавших нечетное число рукопожатий, четно.
2. В любом графе есть по крайней мере две вершины, имеющие одинаковую степень. Доказательство: пусть в графе N вершин. Тогда каждая из них может иметь степень от 0 до N-1. Если степени всех вершин различны, то каждое из N значений должно реализоваться ровно для одной вершины. Рассмотрим вершины степени 0 и степени N-1. Степень вершины N-1 означает, что вершина связана со всеми другими вершинами, а степень вершины 0 означает, что вершина не связана ни с какой другой. Но одновременно так быть не может. Теорема доказана.
Задания к § 51 (с. 222) 6 Существует ли граф с пятью вершинами и следующим набором степеней вершин: а) 0, 1, 2, 3, 4 Нет, по свойству 2: В любом графе есть по крайней мере две вершины, имеющие одинаковую степень. б) 1, 1, 2, 3, 4 Нет, по следствию из свойства 1: Для любого графа количество вершин нечётной степени всегда чётно. в) 1, 1, 2, 2, 4 г) 1, 1, 2, 3, 3 да да
Существует ли граф с семью вершинами и следующим набором степеней вершин: 1, 1, 2, 3, 4, 5, 6? Нет, не существует. Доказательство: Наличие вершины степени 6 показывает, что такая вершина смежна со всеми вершинами, в частности с обеими вершинами степени 1. В то же время наличие вершины степени 5 показывает, что такая вершина смежна со всеми вершинами за исключением одной, то есть хотя бы с одной из вершин степени 1. Но тогда вершина степени 1 смежна с двумя вершинами. Полученное противоречие доказывает, что выполнение условий свойств графа не является достаточным условием существования графа с заданным числом вершин и указанными степенями вершин.
Может ли в государстве, в котором из каждого 7 города выходят ровно три дороги, быть ровно 100 По лемме о рукопожатиях: количество нечетных вершин (городов) нетдорог? 8 – четное число, сл – но 2 к*3=100. -Наша шпионская сеть была хорошо законспирирована, признался агент 007. -– В ней было 77 агентов, но каждый знал только семерых. Почему наверняка можно утверждать, что агент врёт? По лемме о рукопожатиях 3 Какое наибольшее число ребер может содержать граф, имеющий N вершин? Решение: Пусть в графе N вершин, m ребер. Максимальная степень каждой вершины N-1. Тогда (по свойству 1) сумма степеней всех вершин графа равна удвоенному числу его рёбер , т. е. N(N-1)=>2*m. Равенство достигается, если каждая вершина соединена со всеми остальными. Такой граф называется полным. m=[N*(N-1)/2].
Тема: Графы. Поиск путей Задание: На рисунке – схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, И, К. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой. Сколько существует различных путей из города А в город К? И Д Б Ж В А Г Е К
Решение: вершина откуда? N Б Г В Е Д Ж И К А А АБГ Г БВ ВЕ Д ИДЖЕ 1 1 3 1 4 4 4 13 Ответ: 13
ОПРЕДЕЛЕНИЯ a 2 Маршрутом на графе называется a 1 a 3 a 4 последовательность рёбер a 1, a 2, a 3, …, ak, в a 5 a 6 которой конец одного ребра служит началом Рис. 1 a 7 a 9 следующего. a 8 Для графа на рис. 1: a 1, a 2, a 4, a 5, a 2, a 3 – маршрут; a 1, a 2, a 5 – маршрутом не является. Если конец последнего ребра последовательности совпал с началом первого ребра, то маршрут называется циклическим. a 2, a 4, a 5 – циклический маршрут. Маршрут называется цепью, если каждое ребро содержится в нём не более одного раза. Цепь, являющаяся циклическим маршрутом, называется циклом. Цепь, проходящая через каждую свою вершину ровно один раз, называется простой. Если цикл является простой цепью, то его тоже называют простым.
Вершины a и b называют связанными, если существует цепь, начинающаяся в вершине a и заканчивающаяся в вершине b. Договариваются также считать, что каждая вершина связана сама с собой. Граф называют связным, если любые две его вершины связаны. Если же граф несвязен, то в нём можно выделить так называемые связные компоненты, т. е такие множества вершин, соединённых рёбрами исходного графа, каждое из которых является связным графом. Но вершины из разных множеств уже не связаны. Один и тот же граф может быть изображен по-разному. У одинаковых графов одинаковое количество вершин, одинаковый набор степеней вершин, одинаковое количество циклов одной длины и т. д.
Задания 15 Выясните, одинаковы ли графы, изображённые на рисунках 1, 2 и 3. нет Количество циклов длины 3 различно. Рис. 1 нет Рис. 2 Количество циклов длины 3 различно.
Рис. 3 да Количество циклов длины 3, количество циклов длины 4, набор степеней вершин.
Существует ли шестивершинный граф с заданным набором степеней вершин? Если существует, то нарисуйте, если нет, то объясните, почему. a) b) c) d) e) f) g) h) 0, 1, 2, 2, 3, 4 1, 2, 2, 3, 3, 5 1, 1, 2, 2, 3, 4 0, 1, 2, 2, 2, 5 1, 2, 2, 3, 4, 4 5, 5, 5, 5 1, 1, 1, 1 2, 2, 2, 2 a) c) b) d) Не существует, т. к. вершина 5 смежна со всеми, а вершина 0 не смежна ни с какой. Не существует. Нечетное количество нечетных вершин. e) f) Существует, полный граф. g) h)
Способы представления графов Граф называется нагруженным, если каждому ребру сопоставлено некоторое число. Иногда удобно рассматривать ненагруженный граф как нагруженный, у которого каждому ребру поставлено в соответствие число 1. Для решения задач с применением компьютера Изображение графа рисунком Малопригоден для решения задач с применением компьютера Перечисление всех рёбер графа (список) Таблицей смежности, смежности где в клетке на пересечении строки и столбца, соответствующих данным вершинам, указано, соединены эти вершины ребром или нет (для нагруженного графа – нагрузка)
Пример. 2 3 А B 6 4 D 3 2 5 C Список рёбер графа: (AA; 2), (AB; 3), AC; 6), (BC; 2), (AD; 4), (BD; 3), (CD; 5) Вершин а Таблица смежности графа A B C D A 2 3 6 4 B 3 0 2 3 C 6 2 0 5 D 4 3 5 0
В таблице смежности ненагруженного графа везде вместо чисел, указывающих нагрузку (т. е. отличных от 0), стояло бы число 1. А в списке рёбер ненагруженного графа просто не нужна числовая характеристика. Если на каждой линии, соединяющей две смежные вершины, выбрано направление, то такой граф называется ориентированным или сокращённо орграфом. Линия, соединяющая две смежные вершины называется § для орграфа – дугой; § для неориентированного графа – ребром Вершина называется изолированной, если она не соединена линией ни с какой другой вершиной В А D С
Задания № 1 (см. § 15 с. 93 задачника-практикума 10 -11) Граф без изолированных вершин задан следующим списком рёбер: PQ, PS, PT, QS, QT, RS. а) Изобразите этот граф. Б) Задайте этот граф таблицей смежности. R P Q P T R S T P S Q 0 1 1 Q 1 0 0 1 1 R 0 0 0 1 0 S 1 1 1 0 0 T 1 1 0 0 0
№ 2 (см. учебник 11, § 52 № 2 на с. 225) Для каждого из графов, изобра- женных на рисунках, запишите его представление списком рёбер и таблицей смежности А) б) 1 1 2 1 3 6 3 4 2 5 7 4 3 8 г) 5 4 5 5 2 2 6 6 4 д) 1 в) 1 4 3 3 6 2
№ 3 (см. учебник 11, § 52 № 3 на с. 226) Изобразите графы, для которых заданы таблицы смежности: A B C D E F G 0 0 1 1 1 0 0 0 1 1 1 0 0 1 1 1 1 0 А) A B C D E F G 0 0 1 1 0 0 0 1 1 1 0 1 0 0 0 1 1 0 0 0 1 1 0 Б)
A B C D E F G 0 0 0 1 1 1 0 1 0 1 0 0 1 1 0 0 0 1 1 0 0 B)
Организация перехода от одного способа описания графа к другому Работа по организации такого перехода совершенно формальна и поэтому может быть поручена компьютеру. Для простоты при составлении алгоритма будем считать вершины графа пронумерованными натуральными числами от 1 до n (без пропусков и повторений). Список рёбер для нагруженного графа будем задавать как двумерный массив А[1: 3; 1: n], где § в первой строке соответствующей этому массиву таблицы указывается один конец ребра, § во второй – другой его конец, § в третьей – величина нагрузки, (здесь n – число рёбер в графе). Для ненагруженного графа соответствующий массив содержит только первые две строки.
Если граф задаётся таблицей смежности, то будем считать значение первого индекса номером первой вершины, а второго индекса – номером второй вершины; сами номера вершин в массиве не присутствуют. Список рёбер: 1 1 2 ПРИМЕР 2 3 2 4 4 5 1 3 6 1 4 4 2 3 2 2 4 3 3 4 5 Таблица смежности 2 6 1 1 2 3 3 3 верши на 1 2 3 4 2 3 6 4 3 0 2 3 6 2 0 5 4 3 5 0
Лабораторная работа № 21 (к § 52) Задание 1. Пусть требуется граф с n вершинами и m рёбрами. Необходимо создать в памяти компьютера подходящие ненагруженные графы. Т. к. из каждой вершины выходит не более чем n-1 рёбер, а сумма всех степеней вершин равна удвоенному числу рёбер, то 2 m (n – 1). n. Равенство достигается, если каждая вершина графа соединена со всеми остальными вершинами. Такой граф называется полным. Граф будем строить с использованием датчика случайных чисел, одновременно получая для него представление в виде списка рёбер, и в виде таблицы смежности. Обозначим через SR двумерный массив из 2 -х строк и m столбцов, содержащий список рёбер, а через TS – двумерный массив из n строк и n столбцов, содержащий таблицу смежности.
PROGRAM grafi_predstavl; Const nn=200; mm=200; Var n, m, i, j, k: byte; SR: array[1. . 2, 1. . mm] of byte; TS: array[1. . nn, 1. . nn] of byte; BEGIN randomize; write('Введите кол-во вершин графа: '); readln(n); write('Введите кол-во ребер графа: '); readln(m);
IF m>n*(n-1)/2 THEN write. Ln('Такой граф построить нельзя!') ELSE Be. Gi. N {Первоначальное заполнение таблицы смежности нулями} for i: =1 to n do for j: =1 to n do TS[i, j]: =0; {Случайное добавление одного ребра} For i: =1 to m do Begin j: =random(n-1)+1; k: =random(n-j)+j+1; WHILE TS[j, k]=1 Do begin j: =random(n-1)+1; k: =random(n-j)+j+1 end; TS[j, k]: =1; TS[k, j]: =1; SR[1, i]: =j; SR[2, i]: =k; End; Write. Ln('Таблица смежности: '); For i: =1 To n Do begin For j: =1 To n Do write(TS[i, j]: 3); Write. Ln; end; Write. Ln('Список ребер: '); For i: =1 To 2 Do begin For j: =1 To m Do write(SR[i, j]: 3); Write. Ln; end; En. D; readln; END.
Задания № 4. (см. учебник 11, § 52 № 4 на с. 226) А) Граф, имеющий n вершин, задан списком рёбер. Составьте алгоритм, создающий по этому списку таблицу смежности. Б) ) Граф, имеющий n вершин, задан таблицей смежности. Составьте алгоритм, создающий по этой таблице список рёбер.
АЛГОРИТМЫ ОБХОДА СВЯЗНОГО ГРАФА Пусть имеется связный граф. Это означает, что из любой вершины можно, двигаясь по рёбрам, добраться до любой другой его вершины. Алгоритма, позволяющего по двум заданным вершинам построить путь из одной вершины в другую, нет! Но существует несколько алгоритмов, позволяющих из заданной вершины совершить обход всех остальных вершин и, значит, заведомо добраться до нужной вершины. Рассмотрим два наиболее популярных из них:
ПОИСК В ГЛУБИНУ Идея: Пусть зафиксирована начальная вершина а 0. выберем смежную с ней вершину а 1. o Затем для вершины а 1 выбираем смежную с ней вершину из числа ещё не выбранных и т. д. : если мы уже выбрали вершины а 1 , а 2 , …аk, то следующая вершина выбирается смежной с вершиной аk из числа невыбранных o Если для вершины аk такой вершина не нашлось, то возвращаемся к вершине аk -1 и для неё ищем смежную среди невыбранных o При необходимости возвращаемся ещё на шаг назад и т. д. Ясно, что так будут перебраны все вершины графа и поиск закончится. o
Примеры реализации поиска в глубину для одного и того же графа (при одинаковом выборе начальной вершины 13 8 0 5 9 12 0 11 8 6 7 4 1 6 3 1 10 7 13 11 4 3 10 9 12 5 2 2 Своё название этот метод получил за то, что при его реализации мы стремимся как можно дальше уйти от исходной вершины, а когда идти уже некуда, возвращаемся в ту вершину, откуда идёт хотя бы одно ребро в не пройденные ещё вершины.
Пусть граф задан таблицей смежности. Организуем одномерный массив В, число элементов в котором совпадает с числом вершин в графе. На k-м месте этого массива будем писать номер вершины, в которую мы попали на k-м шаге. Из всех смежных вершин будем выбирать вершину с наименьшим номером.
ПОИСК В ШИРИНУ Идея: Рассматриваем все вершины, смежные с уже рассмотренными Примеры реализации поиска в ширину 0 1 4 8 3 2 5 6 7 9 11 12 10 0 3 13 8 4 1 2 7 6 5 11 10 9 12 13
Мосты и точки сочленения Вершина связного графа называется точкой сочленения, если после её удаления из графа (вместе с входящими в неё рёбрами) граф перестаёт быть связным. Ребро связного графа называется мостом, если после его удаления граф перестаёт быть связным.


