Шептунов М. В.етодичка по лабораторным работам по дискретке (1023560), страница 3
Текст из файла (страница 3)
3. Проверка программы на примере выполнения операций над заданными графами.
Краткие теоретические сведения
О
перации над графами
1. Дополнение графа
Дополнение графа G(X,E) до полного графа
.
Обратите внимание на стрелки !!!
2. Объединение
G2=G(X1
X2,E1
E2).
Обратите внимание – ребра е6 и е10 – это разные связи вершин 2 и 4 (разные дороги между пунктами 2 и 4).
3
. Пересечение
G1 G2=G(X1
X2,E1
E2)
при условии
G1 G2=G(X=X1
X2, E=E1
E2=E1\E2
E2\E1).
Замечание: Операции 2-4 коммутативные бинарные операции, но могут быть расширены на большее число графов.
5. Соединение
G1 + G2 = G(X=X1 X2, E=E1
E2
) .
Задание 3: Составьте самостоятельно пример соединения графов G1 и G2.
6. Произведение
В произведении графов вершины обозначаются парами ab, где символы a и b – обозначения вершин в G1 и G2 соответственно.
Пример: Ребро (1x,1y) E, так как первые символы совпадают (1=1), а в G2 есть ребро (x,y). Аналогично и для других ребер.
Неформально: Произведение G1 G2 означает, что каждая вершина G1
заменяется на копию Ga = G2, а каждая вершина G2 заменяется на копию Gb = G1.
7. Композиция
В композиции графов, как и в произведении графов, вершины обозначаются парами ab, где символы a и b – обозначения вершин в G1 и G2 соответственно.
Пример:
Неформально: Композиция G1[G2] означает, что каждая вершина G1
заменяется на копию Ga = G2, а затем, если (a1,a2) E1, то между любыми
вершинами b1 из Ga1 и b2 из Ga2 проводится ребро (дуга) (b1,b2).
8. Разность
G1\G2 = G(X1\X2, E),
где E = {[x1,x2]| x1,x2 X1\X2
[x1,x2]
E1
[x1,x2]
E2}
Задание 4: Приведите пример самостоятельно.
9. Удаление вершины
G(X,E)\{xi}.
В результате получается подграф, содержащий все ребра инцидентные множеству X\{xi}.
10. Удаление ребра
G\{ei}
У
даляется ребро, но при этом сохраняются концевые вершины, получается частный подграф.
11. Добавление вершины
G(X1,E1) + {x} = G(X1 {x}, E = E1), {x}
X1.
12. Добавление ребра
G(X1, E1) + {e} = G(X, E = E1 {e}), {e}
E1.
13. Стягивание подграфа A в вершину
G(X1, E1) = G(X, E)/A, A X,
X1 = X\A {x},
E1 = E\{e = [x1,x2]| x1, x2 A}
{e = [x,u]| u
Г(A)\A}.
Г(А) – множество вершин, смежных с вершинами А.
14. Замыкание или отождествление вершин
В ершины xi и xj отождествляются, если они заменяются одной новой вершиной, при этом все ребра, инцидентные xi и xj, становятся также инцидентны новой вершине.
Содержание отчёта
1. Текст программы на C++ либо Delphi (допускается в среде Visual Basic);
2. Результаты выполнения программы для заданного графа.
Лабораторная работа №7
Маршруты и циклы в графе
Цель работы: изучение задач на связность и достижимость в графах и алгоритмов их решения.
Содержание работы:
-
Разработка алгоритмов определения наличия в графе маршрутов и циклов заданной длины.
-
Разработка и отладка программы для определения наличия в графе маршрутов и циклов заданной длины.
-
Проверка программы на примере определения наличия в заданном графе маршрутов и циклов заданной длины.
Краткие теоретические сведения
Довольно часто на графах возникают такие задачи:
-
Имеются ли в графе маршруты длины k с началом в заданной вершине (k – количество ребер (дуг))?
-
Имеются ли в графе циклы длины k с началом в заданной вершине?
-
Сколько маршрутов длины k имеется в графе с началом в заданной вершине?
-
Сколько циклов длины k имеется в графе с началом в заданной вершине?
-
Какие имеются маршруты длины k с началом в заданной вершине?
-
Какие имеются циклы длины k с началом в заданной вершине?
Решаются эти задачи с помощью операций умножения и сложения матриц смежности графов. Причем при решении одних задач используются бинарные операции умножения и сложения (над 0 и 1), при решении других – обычные алгебраические операции, а при решении третьих – логические операции над переменными (именами ребер или дуг).
Общий подход к решению подобных задач таков:
Пусть необходимо ответить на следующие вопросы:
-
Есть ли в графе маршруты длины k?
-
Сколько маршрутов длины k имеется в графе?
-
Каковы эти маршруты?
Решение:
Задача 1
а) Составить матрицу смежности А.
б) Возвести А в k–ю степень, используя бинарные операции, ,:
А1 А,
А2 А*А,
А3 А2*А, но не А*А2,
Аk = Аk–1 А , но не А Аk–1.
-
– символ умножения.
в) Анализ элементов аkij позволяет оценить наличие маршрутов длины k между вершинами i и j:
если аkij = 1 , то маршруты длины k в графе имеются;
если аkij = 0 , то маршрутов длины k между вершинами i и j нет.
Задача 2
а) составить А,
б) возвести А в степень k , используя правила обычного умножения матриц,
в) анализ элементов аkij позволяет оценить количество маршрутов длины k:
аkij = число – количество маршрутов длины k.
Задача 3
а) Составить матрицу смежности, в которой каждое ребро имеет имя,
б) возвести А в степень k по правилам:
a b = аb,
а + b = а + b (или так а + b = а b),
aa = bb = cc = и т. д. = 0, так как везде ищем кратчайшие маршруты,
a0 = 0.
в) анализ элементов аkij позволяет определить маршруты длины k.
Для маршрутов - предельный показатель степени k = n – 1, так как ищем кратчайшие маршруты. Кратчайшие маршруты – в них каждая вершина повторяется не более одного раза.
Для циклов:
- Предельный показатель степени k = n,
- анализировать элементы аiik .
П ример: Дан граф (см. рисунок).
Требуется ответить на вопрос: Есть маршрут (1,3)?
Составим матрицу смежности
А1 = .
В А1 элемент а1,3 = 0. Маршрута (1,3) длины 1 нет.
Возводим А в степень 2.
А2 = *
=
.
Замечание. Умножение как И, а сложение по ИЛИ.
Элемент а21,3 = 0. Маршрута (1,3) длины 2 нет.
Возводим А в степень 3.
А3 = *
=
.
Элемент а31,3 = 1, следовательно, маршрут (1,3) длины 3 есть.
Сам маршрут находится так:
а31,3 = а21,2 * а2,3 .
Так как а21,2 = а1,4 * а4,2 , то
а31,3= а1,4* а4,2 * а2,3
и маршрут будет таким 1–4–2–3 (читаем индексы).
Существует и такой метод получения всех кратчайших маршрутов:
П рисвоим всем ребрам и дугам имена, например, в виде букв с индексами или без них (см. рисунок.)
Составим матрицу смежности графа так, что если вершины i и j соединены ребром (дугой) с именем x, то элемент матрицы aij равен x.
Для графа примера имеем
A = .
Для получения кратчайших маршрутов длины k возведем A в k–ю степень, выполняя умножение и сложение по правилам алгебры логики:
Умножение – a & b = ab,
Сложение – a v b,
При этом c(a v b) = ca v cb ac v bc,
aab = 0 – так как ищем кратчайшие маршруты и повторение ребер (дуг) недопустимо,
ab0 = 0.
A2 = *
=
.
A3 = *
=
.
Содержание отчёта
1. Текст программы на C++ либо Delphi (допускается в среде Visual Basic);
2. Результаты выполнения программы для заданного графа.
Лабораторная работа №8
Исследование графа на нахождение эйлерова цикла
Цель работы:
-
Разработка алгоритма проверки четности степеней вершин графа.
-
Разработка алгоритма проверки равенства полустепени захода и
полустепени исхода всех вершин орграфа.
Теоретические основы
Эйлеров граф – граф, который содержит Эйлеров цикл, включающий все ребра, каждое из которых проходится один раз.
Степенью вершины v называется число ребер, инцидентных этой вершине. Степень вершины v обозначается deg v.
(i,i)-элемент матрицы A² равен степени вершины vi.
Теорема 1.
Связный неориентированный граф является эйлеровым тогда и только тогда, когда степени его вершин четные.
В ориентированном графе множество номеров столбцов, для которых элемент i-ой строки равен 1, определяют множество Г (хi). Множество номеров строк, для которых элемент i-го столбца матрицы смежности равен 1,
определяют множество Г ˉ¹(хi).
Теорема 2.
Связный орграф содержит эйлеров контур тогда и только тогда, когда
хiХ Г(хi)=Г ˉ¹(хi), т.е. равны полустепени захода и полустепени исхода всех вершин орграфа.
Пример.
-
Дан неориентированный граф:
V1 V5
V2 V6
Построим матрицу смежности:
0 | 1 | 1 | 0 | 0 | 0 | |
1 | 0 | 1 | 1 | 0 | 1 | |
A= | 1 | 1 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 0 | 0 | 0 | |
0 | 0 | 1 | 0 | 0 | 1 | |
0 | 1 | 0 | 0 | 1 | 0 |
Построим матрицу A²:
2 | 1 | 1 | 1 | 1 | 1 | |
1 | 4 | 2 | 1 | 2 | 0 | |
A²= | 1 | 2 | 4 | 1 | 0 | 2 |
1 | 1 | 1 | 2 | 1 | 1 | |
1 | 2 | 0 | 1 | 2 | 0 | |
1 | 0 | 2 | 1 | 0 | 2 |
Определим степени вершин данного графа: