Вы находитесь на странице: 1из 54

Министерство образования Республики Беларусь

Учреждение образования
“Белорусский государственный университет информатики и
радиоэлектроники”

Кафедра интеллектуальных информационных технологий


Факультет информационных технологий и управления

Лабораторная работа

по курсу
«Применение теории графов в информатике»

Выполнил: Коршунов Р.А.

Проверил: Шункевич Д.В

МИНСК 2020
Цель лабораторных работ: закрепление теоретического курса, приобретение
навыков решения задач, активизация самостоятельной работы магистрантов.

Классификация графов.
Полный неоринтированный граф — простой неориентированный граф, в котором
каждая пара различных вершин смежна.

Матрица смежности графа Изображение

1] 2] 3] 415 и j >)

1] Oj} 1) 1) 1) 1

@ горцентированный граф

Переменные:
® плуспбеа - множество непроверенных вершин
® veriable - множество вершин, у которых мы проверяем наличие связи с текушей
дугой

Алгоритм
1. Создадим множество unverified.
2. — Создадим множество уечйаЫе.
3. — Добавим все вершины графа во множество ипуепйеа.

unverified

Фнеорнент прованный граф

4. — Разберем множество ипуепйед.


4.1. — Возьмем вершину “1”.
4.1.1. — Добавим все вершины графа, кроме “1”, во множество уепнаЫе.

unverified

vertable

4.1.2. — Разберем множество уепйаЫе.


4.1.2.1. — Возьмем вершину “2” 13 verifiable.
4.1.2.1.1. — Проверим, связана ли она с вершиной “1” ребром.
4.1.2.1.2. — Если вершины связаны, удалим вершину “2 ” из
множества успНае. Иначе перейдем 6.

veriable

4.1.2.2. — Возьмем вершину “3” из уепаЫе.


4.1.2.2.1. Проверим, связана ли она с вершиной “1” ребром.
4.1.2.2.2. — Если вершины связаны, удалим вершину “3 ” из
множества успа Ме. Иначе перейдем 6.
4.1.2.3. Возьмем вершину “4” из уепаЫе.
4.1.2.3.1. — Проверим, связана ли она с вершиной “4” ребром.
4.1.2.3.2. — Если вершины связаны, удалим вершину “3 ” из

множества успа Ме. Иначе перейдем 6.


4.1.2.4. — Возьмем вершину “5” из уепаЫе.
4.1.2.41. — Проверим, связана ли она с вершиной “4” ребром.
4.1.2.4.2. — Если вершины связаны, удалим вершину “3 ” из
множества успа Ме. Иначе перейдем 6.
4.1.3. Удалим множесто уепаЫе.
4.1.4. — Удалим вершину “1” из множества ипуепйе4.
4.2. — Аналогичные шаги проведем для всех остальных вершин из ипуепйеч.
5. — Т.к. в результате разбора не возникло никаких проблем, наш граф является
полным. Перейдем к пункту 7.

@есриентированный граф =... граф

6. — Т.к. одна или несколько вершин не имеют ребер со всеми вершинами, граф не
является полным.

7. — Удалим множество ипует Нед.

8. Удалим множество уегШаЫе.

9. — Конец работы программы.


Гамильтонов граф - это граф, содержащий гамильтонов цикл. Под гамильтоновым
циклом понимается цикл, проходящий через каждую вершину графа ровно один раз.

Матрица смежности графа Изображение

1] 21 31 41 5

1] 0) 1) 0] OF 1

неориентированный граф

Переменные:
® qucue - очередь для построения гамильтонова цикла.

Алгоритм
1. _ Создадим ааеце.
2. — Добавим в очередь вершины графа в произвольном порядке.

queue

нервы й элемент

> О
OOS Oo a
3. Pa36epem queue.
3.1. Проверим, связаны ли вершины “2” и “3” ребром в графе. Т.к. они
связаны, переместим 2 в конец очереди.

queue

первый УМ,

по 07
3.2. — Проверим, связаны ли вершины “3” и “5” ребром в графе. Т.к. они не
связаны, проведем замену вершин ребер.
3.2.1. Проверим, связаны ли пары вершин “3” и “1”, “5” и “4” ребрами в

графе.

3.2.2. “3” и“Г’ не связаны, “5” и “4” связаны.

3.2.3. Проверим, связаны ли пары вершин “3” и “4”, “5” и “2” ребрами в
графе.

3.2.4. Ток. они связаны, поменяем местами вершины “5” и “4”.

queue

первый элемен
„О

Om

я O00; г

3.2.5. — Переместим веришну “3” в конец очереди.

queue

: @ 1
первый элемент
о О
ae, я

Es
oO

3. оверим, связаны ли вершины и ебром в графе. Т.к. они не


3 3 II , “4” sy” б T
связаны, проведем замену вершин ребер.
3.3.1. Проверим, связаны ли пары вершин “3” и “1”, “5” и “4” ребрами в
графе.
3.3.2. Т.к. они связаны, поменяем местами вершины “1” и “5”.
> р

quene

: Ф 1
первым элемент
О
On a3

SO >

3.3.3. — Переместим веришну “4” в конец очереди.


Чнене

первыи элемен
О
о

и“

3.4. — Проверим, связаны ли вершины “5” и “1” ребром в графе. Т.к. они
связаны, переместим “5” в конец очереди.

queue

ТА >
о—0-—°

3.5. Проверим, связаны ли вершины “1” и “2” ребром в графе. Т.к. они
связаны, переместим “1” в конец очереди.

днене

первый УХ
О 7

Za
о— ome ©;

первый элемен

я
On,

Проверим, связаны ли вершины “1” и “2” ребром в графе. Т.к. они связаны,
значит, заданный граф является гамильтоновым графом. Иначе - не является.

неорнентированный граф

замильтонов граф

Удалим апепе.
Конец работы программы.
Эйлеров граф - это граф, содеражащий эйлеров цикл. Под эйлеровым циклом
понимается цикл, проходящий через все ребра графа ровно одни раз. Согласно теореме
Эйлера, эйлеров цикл существует тогда, когда в графе отсутсвуют вершины с
нечетной и нулевой степенью. Степенью вершины называется число ребер графа,
которым принадлежит эта вершина.

Матрица смежности Изображение

11 21 31 4| 5] 6

1] 0} 1) 1) оо

Be горнентированный граф

Переменные:
® плуспбеа - множество непроверенных вершин
Алгоритм
1. _ Создадим множество ипуенеа.
2. — Добавим все вершины графа во множество ппуенйед.

unverified

3. Pa30epem MHoxecTBO unverified.


3.1. — Возьмем вершину “ВТ”.
3.1.1. — Найдем степень вершины. Она равна 2. Если она четная, перейдем
к пункту 3.1.2. Иначе - к пункту 5.
измеряемы паралеетри

степень вершины в

al

@———>O

©,

чиело

3.1.2. Удалим “в” из множества ппуенйе4.


3.2. — Возьмем вершину “B2”.
3.2.1. — Найдем степень вершины. Она равна 2. Если она четная, перейдем
к пункту 3.2.2. Иначе - к пункту 5.

измеряемы параметр

степень вершин of

f
У измерение

числе

3.2.2. — Удалим “в2” из множества ппуенйе4.


3.3. Возьмем вершину “в3”.
3.3.1. Найдем степень вершины. Она равна 4. Если она четная, перейдем
к пункту 3.3.2. Иначе - к пункту 5.

измеряемы параметр)

стенень вершин: 8)

Ц"

я
И
fe. fépen. He
о,


числе
3.3.2. Удалим “в3” из множества ппуенйе4.
3.4. — Возьмем вершину “в4”.
3.4.1. — Найдем степень вершины. Она равна 2. Если она четная, перейдем
к пункту 3.4.2. Иначе - к пункту 5.
3.4.2. — Удалим “в4” из множества ппуенйе4.
3.5. Возьмем вершину “в5”.
3.5.1. — Найдем степень вершины. Она равна 2. Если она четная, перейдем
к пункту 3.5.2. Иначе - к пункту 5.
3.5.2. Удалим “в5” из множества ппуенйе4.
3.6. — Возьмем вершину “вб”.
3.6.1. — Найдем степень вершины. Она равна 2. Если она четная, перейдем
к пункту 3.6.2. Иначе - к пункту 5.
3.6.2. — Удалим “вб” из множества ппуенйе4.
Т.к. в результате разбора не возникло никаких проблем, наш граф является
эйлеровым. Перейдем к пункту 6.

©
A | 52
fo
a
1
a =O= = ===0
| ef
|
|
о——0
65 66
@ неорнентированный граф ®, гров граф

Т.к одна или несколько вершин имеют нечетную степень, наш граф не является
эйлеровым.

Удалим множество ппуепйе(.

Конец работы программы.


Расчет числовых характеристик графа
Эксцентриситет вершины у - расстояние до максимально удаленной от нее вершины.
Для графа, для которого не определен вес его ребер, расстояние определяется в виде
числа ребер.

Матрица смежности графа Изображение

И 21 31 41 5| 6] 7| 8] 9

1] OF 1) 1] OF OF OF OF OF O
Ox 8
a,
2] 1) 0} O} OF OF 1] OF OF O O85
fl 66 \ |
000000 Pa \ $
и \
4} 0} O} 1] OF 1] OF OF OF O On \
5} O} OF OF 1) 0) 1] 1) 0) 0 о aia в4
az

(@неориентированный граф
Переменные:

® qucue - очередь для непроверенных вершин

e checked - множество проверенных вершин


Алгоритм

1. — Создадим очередь диаеие.

Создадим множество свесКед.


Эксцентриситет ищем для вершины в1. Пометим ее как начальную.
Проверим, с какими вершинами связана вершина в1. Это в2 и в3.
Добавим в2 и в3 в очерель ашеце.

quene

первый элемент"

82 a3
6.

7.

Пометим расстояние между в1 и вершинами в2 и в3.

Добавим в1 во множество спеске4.

Разберем очередь амете.


8.1. — Возьмем вершину в2.

8.1.1.

8.1.1.1.

Вершина Расстояние
B2 1
B3 1
checked

51

8.1.1.2.

Проверим, с какими вершинами связана вершина в1. Это в] и вб.


Возьмем вершину в1.
8.1.1.1.1. — Т.к она начальная, оставим ее.
Возьмем вершину вб.
8.1.1.2.1. Проверим, принадлежит ли вб множеству сНеске4.
Если нет, идем дальше.
8.1.1.2.2. — Найдем расстояние между в] и вб. Это 2.
Вершина Расстояние
B2 1
B3 1
BO 2
8.1.1.2.3. Проверим, принадлежит ли вб очереди queue. Ecam
нет, добавим ее в queue.
queue
первый элемент"
О
52 Е. О ———
53
Удалим в2 из ацеце.
8.1.3. Добавим в2 в свескед.

checked
queue

нервый элемени"

„О ———O 4 о, я
a

8.2. — Возьмем вершину в3.


8.2.1. — Проверим, с какими вершинами связана вершина в3. Это в] и в4.

8.2.1.1. — Возьмем вершину в1.


8.2.1.1.1. — Т.к она начальная, оставим ее.

8.2.1.2. — Возьмем вершину в4.


8.2.1.2.1. Проверим, принадлежит ли вф множеству сНеске4.

Если нет, идем дальше.

8.2.1.2.2. — Найдем расстояние между в] и в4. Это 2.

Вершина Расстояние
B2 1
B3 1
BO 2
B4 2

8.2.1.2.3. Проверим, принадлежит ли в4 очереди queue. Ecam


нет, добавим ее в queue.

quene

первый элемент"

9—1 oe :
56
8.2.2. — Удалим в3 из queue.
8.2.3. Добавим в3 B checked.
checked
queue

нервый элемент"

О о О,

= #2

Oz О

od

8.3. Возьмем вершину вб.


8.3.1. Проверим, с какими вершинами связана вершина вб. Это в2 и в5.
8.3.1.1. — Возьмем вершину в2.
8.3.1.1.1. Проверим, принадлежит ли в2 множеству сНеске4.
Если да, идем к шагу 8.3.1.2.
8.3.1.2. — Возьмем вершину в5.
8.3.1.2.1. Проверим, принадлежит ли в5 множеству сНеске4.
Если нет, идем дальше.
8.3.1.2.2. — Найдем расстояние между в] и в5. Это 3.

Вершина Расстояние
B2 1
B3 1
BO 2
B4 2
BS 3

8.3.1.2.3. Проверим, принадлежит ли в5 очереди queue. Ecam


нет, добавим ее в queue.

qruene
нервый элемент"

Poe

8.3.2. — Удалим в3 из queue.


8.3.3. Добавим в3 в свеске4.
checked
queue

нервый элемент"

O О ©. 9.9.

a 2
af 55 = 63

8.4. — Возьмем вершину в4.


8.4.1. — Проверим, с какими вершинами связана вершина в4. Это в3 и в5.
8.4.1.1. — Возьмем вершину в3.
8.4.1.1.1. Проверим, принадлежит ли в? множеству сНеске4.
Если да, идем к шагу 8.4.1.2.
8.4.1.2. — Возьмем вершину в5.
8.4.1.2.1. Проверим, принадлежит ли в5 множеству сНеске4.
Если нет, идем дальше.
8.4.1.2.2. — Найдем расстояние между в] и в5. Это 3.
8.4.1.2.3. Сравним с уже найденным расстоянием между в] и
в5. Если. посчитанное расстояние больше или равно
уже найденному, оставим все без изменений. Иначе
заменим найденное значение только что
посчитанным.
8.4.1.2.4. Проверим, принадлежит ли в5 очереди ашепе. Если
нет, добавим ее в queue.
8.4.2. — Удалим в4 из queue.
8.4.3. — Добавим в4 в свескед.

даа checked
первый элемен"
О
О Оо ad
Oy 51 О. О, 66

8.5. — Возьмем вершину в5.


8.5.1. — Проверим, с какими вершинами связана вершина в5. Это вб и B7.
8.5.1.1. — Возьмем вершину вб.
8.5.1.1.1. Проверим, принадлежит ли вб множеству сНеске4.
Если да, идем к шату 8.5.1.2.
8.5.1.2. — Возьмем вершину в7.
8.5.1.2.1. Проверим, принадлежит ли в7 множеству сНеске4.
Если нет, идем дальше.
8.5.1.2.2. — Найдем расстояние между в] и в5. Это 4.

Вершина Расстояние
B2 1

B3 1

BO 2

B4 2

BD

B/

8.5.1.2.3. Проверим, принадлежит ли в7 очереди queue. Ecam


нет, добавим ее в queue.

нене

О
первый ~y \
ое».
a3 в

8.5.2. — Удалим вэ из queue.


8.5.3. Добавим в5 в сНескед.

checked
queue

первый элемент"
О. < о, о, ч% "

8.6. — Возьмем вершину в7.


8.6.1. — Проверим, с какими вершинами связана вершина в7. Это в5 и в8.
8.6.1.1. — Возьмем вершину в5.
8.6.1.1.1. Проверим, принадлежит ли в5 множеству сНеске4.
Если да, идем к шагу 8.6.1.2.
8.6.1.2. — Возьмем вершину в8.
8.6.1.2.1. Проверим, принадлежит ли в8 множеству сНеске4.
Если нет, идем дальше.
8.6.1.2.2. — Найдем расстояние между в] и в8. Это 5.

Вершина Расстояние
B2 1
B3
BO
B4
BS
в7

BS

8.6.1.2.3. Проверим, принадлежит ли в8 очереди queue. Ecam


нет, добавим ее в queue.

вы] |

queue
первый элемент"

©ж—

ay 58
8.6.2. — Удалим в7 из амепе.
8.6.3. — Добавим в7 B checked.
checked
нее
первый элемен" о.
о 55
a8 a о, a =

8.7. — Возьмем вершину в8.


8.7.1. Проверим, с какими вершинами связана вершина в8. Это в7 и в9.
8.7.1.1. — Возьмем вершину в7.
8.7.1.1.1. Проверим, принадлежит ли в7 множеству сНеске4.
Если да, идем к шагу 8.7.1.2.
8.7.1.2. — Возьмем вершину в9.
8.7.1.2.1. Проверим, принадлежит ли в9 множеству сНеске4.
Если нет, идем дальше.
8.7.1.2.2. — Найдем расстояние между в] и в9. Это 6.
Вершина Расстояние
B2 1
B3 1
BO 2
B4 2
BS 3
в7 4
в8 5
B9 6

8.7.1.2.3. Проверим, принадлежит ли в8 очереди queue. Ecam


нет, добавим ее в queue.

queue
первый элемении"
Фо
58 о,
8.7.2. — Удалим в8 из амепе.
8.7.3. Добавим в8 B checked.
checked

queue

58

первый элемении"

О.
a
О.
О 62
О О 54
о, = о, о, ие
8.8. — Возьмем вершину в9.
8.8.1. — Проверим, с какими вершинами связана вершина в9. Это в8.
8.8.2. — Возьмем вершину в8.
8.8.2.1. Проверим, принадлежит ли в7 множеству сНескКед. Если да,
идем к шагу 8.8.3.

8.8.3. Удалим в9 из амепе.


8.8.4. JoOasum B9 B checked.

checked
quene
o.90 6. &

52 #3

9. — Среди всех расстояний найдем самое большое. Это расстояние до в9, равное 6.
10. — Удалим очередь queue.
11. — Удалим множество свеске4.
12. — Конец работы программы.

Диаметр графа - это максимальный эксцентриситет среди всех вершин графа.


Радиус графа - это минимальный эксцентриситет среди всех вершин графа.

Матрица смежности графа Изображение

И 21 31 41 5| 6] 7| 8] 9

1] 0] 1] 1] 0] Of of of of 0 >,
Вы
2} 1] 0] of 0} 0} 1] Of Of 0 J ont
A и \ \
3] 1] 0] 0} 1] 0} Of o| Of 0 pe \ 6
fi \
( X
4] 0] 0} 1] 0} 1] Of of of 0 A \
61 x,
м tty
5] 0] 0] Of 1] 0} 1] 1] Of 0 SOF

(@=еориентированный граф
Примечание. В данном алгоритме был опущен шаг с вычислнием эксцентриситета.
Переменные:
® nodes - множесто вершин графа
Алгоритм
1. — Создадим множество подез.
2. — Добавим вершины графа во множество по4е$.

nodes

61

3. Разберем множество по4е$


3.1. — Возьмем вершину в1.
3.1.1.

Определим эксцентриситет вершины в1. Он равен 6

S \
fe 59
#7
ть
Вершина Эксцентриситет
Bl 6
3.1.2. — Удалим вершину в1 из множества nodes.

nodes

66
o2

eg”
3.2.

Возьмем вершину в2.


3.2.1.

Определим эксцентриситет вершины в2. Он равен 5.


Вершина Эксцентриситет
Bl 6
B2 5
3.2.2. — Удалим вершину в2 из множества nodes.
3.3. — Возьмем вершину в3.
3.3.1.
Определим эксцентриситет вершины в3. Он равен 5.
Вершина Эксцентриситет
Bl 6
B2 5
B3 5
3.3.2. — Удалим вершину в3 из множества nodes.
3.4. — Возьмем вершину в4.
3.4.1.

Определим эксцентриситет вершины в4. Он равен 4.


Вершина Эксцентриситет
Bl 6
B2 5
3.4.2.

B3

B4

Удалим вершину в4 из множества по4е$.

3.5. — Возьмем вершину в5.

3.5.1. — Определим эксцентриситет вершины в5. Он равен 3.


Вершина Эксцентриситет
Bl 6
B2 5
B3 5
B4 4
BS 3
3.5.2. — Удалим вершину в5 из множества nodes.

3.6. — Возьмем вершину вб.

3.6.1. — Определим эксцентриситет вершины вб. Он равен 4.


Вершина Эксцентриситет
Bl 6
B2 5
B3 5
B4 4
BS 3
BO 4
3.6.2. — Удалим вершину вб из множества nodes.

3.7. — Возьмем вершину в7.

3.7.1. Определим эксцентриситет вершины в7. Он равен 4.


Вершина Эксцентриситет
Bl 6
B2 5
B3 5
B4 4
BS 3
BO 4
в7 4
3.7.2. — Удалим вершину в7 из множества nodes.

3.8. — Возьмем вершину в8.

3.8.1. — Определим эксцентриситет вершины в8. Он равен 5.


Вершина Эксцентриситет
Bl 6
B2 5
B3 5
B4 4
BS 3
BO 4
в7 4
в8 5
3.8.2. — Удалим вершину в8 из множества nodes.
3.9. — Возьмем вершину в9.
3.9.1. — Определим эксцентриситет вершины в8. Он равен 6.
Вершина Эксцентриситет
Bl 6
B2 5
B3 5
B4 4
BS 3
BO 4
в7 4
в8 5
B9 6
3.9.2. — Удалим вершину в8 из множества nodes.

Определим радиус графа.

4.1. — Найдем минимальный эксцентриситет. Он равен 3.

4.2. Пометим вершины графа с эксцентриситетом 3 как центральные. Это

вершина в5.

С.

\
о и о,
Са

центральная веринна х

о 55

@ горнентированный граф

Определим диаметра графа.

5.1. — Найдем максимальный эксцентриситет. Он равен 6.


5.2.

Пометим вершины графа с эксцентриситетом 6 как перефирийные. Это


вершины в| и в9.

р.
и —о центральная вершина"
Ae С \
о и \ \ “a
\ О териферийная вершина"
f ь ?
м и 64 Oo
7) о”

(@=неориентированный граф
Удалим множество по4ез.

Конец работы программы.


Поиск ключевых компонентов графа

Шарнир - это вершина графа, при удалении которой количество компонент связности

возрастает.
Мост — ребро в графе, удаление которого увеличивает число компонент связности.

Матрица смежности графа Изображение


1] 2] 3] 4] 5] 6] 7
5 о
1] OF 1] OF 1] OF OF O J So A yer
52 и ей м р
21 1] 0] 1] 1] of of 0 aa fA
\ i м
if =
3] OF 1] OF 1] OF OF O i О
О 56
53
47 1] 1] 1) 0] 1] 0) 0 Я
о] Пт Фнесриентированный граф
6] OF OF OF OF 1] OF 1
7} 0] 0} OF OF 1] 1] 0
Переменные:

ад] - множество смежных вершин для данной вершины

ch - множество вершин-потомков данной вершины

dif - множество-разность множест а4] и св

Эаск - стек для хранения вершин графа после обхода в глубину.

Алгоритм

1.

wey Ds

Создаем множество а4].

Создаем множество св.

Создаем множество АН.

Co3gaem ctTek stack.

Совершим обход графа в глубину. Поставим в соответствие каждой вершине


число п - глубинный номер - номер, равный шагу, на котором данная вершина
была достигнута. Добавим элементы графа в $асК в том порядке, в котором они
были достигнуты.

Примечание. Отсчет начинается с 1. Для удобства глубинные номера


совпадает с номерами вершин в графе.

Вершина
1 2 3 4 5 6 7
Глубинный 1 2 3 4 5 6 7
номер, т
stack

последний элемент" <>

О,
eo

Pa36epem stack.
6.1. — Возьмем вершину в7.
6.1.1. — Добавим во множесто а вершины, смежные с вершиной в7. Это
вершины в5 и вб.
6.1.2. — Добавим во множество сп вершины-потомки вершины в7. Их нет.
Вершина х является потомком вершины у тогда, когда при обходе
вершина х была достигнута через вершину у.
6.1.3. Добавим во множество Ш результат разности adj u сП. Это
вершины в5 и вб.

® смежные вершины *

ay вершины-потомки*
Aw
ле Sy
A S
adj д “Sa
65 О О
К тех“
О

66 ® , | ®,,

о’ м зность *

\e
„О

6.1.4. Определим среди вершин множества св вершину с наименьшим


значением Low.
Гоу - наименьший из глубинных номеров вершин, смежных с
потомками вершины х. Го\’ вычилсяется по формуле:

Low(yv) = min¢ min Low(x n


( ) | in ( ) ye АНЯ ‘Chiv) nt).

Т.к. множестов с| пустое, вершина не была найдена.


6.1.5. Определим среди верщин множества ЧЁ вершину с минимальным
значением глубинного номера. Это вершина в5. п=5
6.1.6. T.o, Low(7)=5.
Вершина
1 2 3 4 5 6 7

Low - 0 0 0 0 0 5
6.1.7. — Очистим множество а4].
6.1.8. — Очистим множество с|.
6.1.9. — Очистим множество СГ.

6.1.19. — Удалим в7 us stack.


a

последний Е

о,

“Ong be

6.2. — Возьмем вершину вб.

6.2.1.

6.2.2.
6.2.3.

Добавим во множесто а] вершины, смежные с вершиной вб. Это


вершины в5 и в7.

Добавим во множество сй вершины-потомки вершины вб. Это в7.


Добавим во множество ЧЁ результат разности а и сй. Это
вершина в5.
босмежные вершины*

66 вершины-потомки *

ee gg | ie о.
О о
О

‚Я |
O° eee
\he

6.2.4. Определим среди вершин множества св вершину с наименьшим


значением Г.о\у. Dro B7. Low(7)=5

6.2.5. Определим среди верщин множества ЧЁ вершину с минимальным


значением глубинного номера. Это вершина в5. п=5

6.2.6. — Среди Го\ и п выберем минимальное. Т.о., [0%'(6)=5

Вершина
1 2 3 4 5 6 7
Low - 0 0 0 0 5 5
6.2.7. — Очистим множество а4].
6.2.8. — Очистим множество ср.
6.2.9. — Очистим множество 91.
6.2.10. — Удалим вб из Яаск.
stack
последний элемении”
pn
О
О; ес oe
of 63
6.3. Разбор вершин 2-5 аналогичен вышеописанному разбору. Вершина 1 не
рассматривается.
Т.о, результао вычисления Г.о\у для каждой вершины равен:
7.

Вершина

1 2 3 4 5 6 7

Low - 1 1 1 4 5 5

На основе полученных вычислений найдем шарниры и мосты графа.


7.1. — Разберем вершины графа
7.1.1. — Возьмем вершину в|. в] - корневая вершина, т.к. обход начинался
с нее.
7.1.1.1. Корнева вершина (вершина, из которой был начат обход в
глубину) является шарниром тогда, когда у нее более двух
потомков. Т.к. у в1 только один потомок, шарниром она не
является.

7.1.2. Возьмем вершину в2. Вершина х (не корневая) является


шарниром тогда, когда у нее есть такой потомок у, что
n(x)=Low(y)

7.1.2.1. — Возьмем потомков вершины в2. Это в3.


7.1.2.2. — Проверим, равно ли п(в2) и Го\(в3).
7.1.2.3. Т.к. они не равны, в2 не является шарниром.
7.1.3. Возьмем вершину в3.
7.1.3.1. — Возьмем потомков вершины в3. Это в4.
7.1.3.2. — Проверим, равно ли п(в3) и Гоу’(в4).
7.1.3.3. Т.к. они не равны, в3 не является шарниром.
7.1.4. — Возьмем вершину в4.
7.1.4.1. — Возьмем потомков вершины в4. Это в5.
7.1.4.2. — Проверим, равно ли п(в4) и Гоу’(в5).
7.1.4.3. Т.к. они равны, в4 является шарниром.
7.1.4.4. — Проверим наличие мостов.
7.1.4.4.1. — Возьмем потомков вершины в5. Это вб.
7.1.4.4.2. — Проверим, что п(в4)<Гоу(вб).
7.1.4.43. Т.к. неравенство выполняется, ребро (в4; в5)
является мостом.
7.1.5. Возьмем вершину в5.
7.1.5.1. — Возьмем потомков вершины в5. Это вб.
7.1.5.2. — Проверим, равно ли п(в5) и Го\(вб).
7.1.5.3. Т.к. они равны, в5 является шарниром.
7.1.5.4. — Проверим наличие мостов.
7.1.5.4.1. — Возьмем потомков вершины вб. Это в7.
7.1.5.4.2. — Проверим, что п(в5)<Го\у(в7).
7.1.5.43. Т.к. неравенство не выполняется, ребро (в5; вб) не
является мостом.
7.1.6. — Возьмем вершину вб.
7.1.6.1. — Возьмем потомков вершины вб. Это в7.
7.1.6.2. — Проверим, равно ли п(вб) и Гоу’(в7).
7.1.6.3. Т.к. они не равны, вб не является шарниром.
7.2. Т.о, шарнирами являются вершины:
e в4
® в5
Мосты:
® (84; в5)

ol

©, O О
ie eS 54 4 #7 64

и a. 27
fF о мирно

\ / №

6 о,

в?

preopu енииированный граф

8. Удалим множество а4].


9. — Удалим множество ch.
10. — Удалим множество а.
11. — Удалим стек %асК.
12. — Конец работы программы.

Цикл - это замкнутый обход без повторного прохода по ребру или посещения
вершины дважды, за исключением начальной и конечной вершин.

Матрица смежности графа Изображение

1] 21 31 41 5

101310] 0
Фнеорни ентированный граф
Переменные:

ппсреске4 - множество непроверенных вершин


спеске4 - множество проверенных вершин
сус1е5 - множестов всех возможных циклов
Без - множество наследников вершины

субе - множество вершин цикла

new_cycle - новый цикл

Алгоритм:

1.

2
3.
4.
5

Создадим множество unchecked.

Создадим множество спескед.

Создадим множество сус1е$.

Добавим во множество писНескей вершины графа.

Разберем множество ипспеске4.

5.1. — Возьмем вершину “1”.


5.1.1. — Создадим множество су@е.
5.1.2. — Добавим во множество субе вершину “1”.
5.1.3. Вызовем функцию Япа суб (1, 1, субе).
5.1.4. — В результате получим:

eyeles

5.1.5. Удалим вершину “1” из множества ипсВеске4.


5.1.6. — Добавим вершину “1” во множеств сНесКе4.
uichecked checked

5.1.7. — Удалим множество сус[е.


5.2. — Аналогичные шаги проведем для всех остальных вершин из Веп$.
6. В результате получим:

eyeles

Удалим множество unchecked.


Удалим множество Checked.
Удалим множество су ез.

10. — Конец работы программы.

зе

Функция Ипа су с(а, 6, ситепё сусе), где а - текущая вершина, 6 - вершина, которую
нужно достичь, сус{е - цикл:
1. Проверим, совпадают ли вершины а и 6.
2. — Если совпадают:
2.1. Ecmu pa3mep current_cycle>=2.
2.1.1. — Добавим цикл в cycles.
3. — Нсли не совпадают:
3.1. — Проверим наличие возможных потомков вершины 6.
3.2. — Нели они найдены:
3.2.1. — Создадим множество Веп$.
3.2.2. — Добавим во множество Вей наследников вершины 6.
3.2.3. Разберем множество Ве!5:
3.2.3.1. — Возьмем некоторую вершину с.
3.2.3.1.1. Проверим, входила ли вершина с в ситепе суб.
3.2.3.1.2. — Если нет:
3.2.3.1.2.1. Создадим пех суфе, в который добавим
вершины из сатепё суб.
3.2.3.1.2.2. Вызовем функцию find cycle (с, Ъ,
new_cycle)
3.2.3.1.2.3. Удалим множество пе\у_сусе.
3.2.3.1.3. Удалим вершину с из Веи$.
3.2.3.2. Аналогичные шаги проведем для всех остальных вершин
u3 heirs.
3.2.4. — Удалим множество Пей.

Вам также может понравиться