Главная > Дискретная математика. Алгоритмы и программы
НАПИШУ ВСЁ ЧТО ЗАДАЛИ
СЕКРЕТНЫЙ БОТ В ТЕЛЕГЕ
<< Предыдущий параграф Следующий параграф >>
Пред.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
След.
Макеты страниц

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

Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике

ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO

6.3. Метод поиска в глубину

Один из наиболее естественных способов систематического исследования всех вершин графа исходит из процедуры прохождения графа методом поиска с возвращением, который исследует граф в глубину (см. п. 4.1). На неориентированном графе поиск в глубину осуществляется следующим образом. Когда посещаем вершину то далее идем по одному из ребер инцидентному вершине Если вершина у уже пройдена (посещалась ранее), то возвращаемся в х и выбираем

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

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

Метод поиска в глубину на простом неориентированном графе представлен в алгоритме 6.1. Рекурсивная процедура осуществляет поиск в глубину на графе содержащем и строит для графа дерево поиска, которое является ориентированным остовным деревом (если исходный граф не связен, то будет лесом); является отцом строящемся дереве, где исследуемая вершина. Граф задан структурой смежности где означает множество вершин, смежных Элементы это ребра строящегося дерева поиска, а элементы В — это обратные ребра, которые не могут принадлежать так как они ведут назад в пройденные ранее вершины. Заметим, что обратное ребро должно идти от потомка к предку по дереву поиска. Чтобы отличить уже пройденные вершины от непройденных, вводится вектор меток вершин, которые постепенно нумеруются от 1 до по мере того, как попадаем в них. Сначала полагается для всех в знак того, что ни одна вершина не пройдена, и когда попадаем в вершину х первый раз, получает ненулевое значение. Ребро если метка вершины Если же то условием того, что будет обратным ребром, являются соотношения Условие означает, что вершина была пройдена раньше вершины х. Поэтому ребро будет обратным, если оно не является ребром дерева пройденным от отца т. е.

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

Алгоритм 6.1. Поиск в глубину на простом неориентированном графе

(см. скан)

Программная реализация алгоритма 6.1 представлена алгоритмом 6.2. Реализация близко соответствует основному алгоритму 6.1. Программа представлена тремя процедурами где основная программа поиска в глубину; рекурсивная процедура поиска, один к одному соответствующая аналогичной процедуре в алгоритме 6.1; процедура контроля исходных данных и изменения меток вершин. Изменение нумерации меток вершин является существенным для алгоритма. Новые метки вершин — это натуральные числа от 1 до Данная нумерация позволяет обращаться к элементам массивов, содержащих информацию о вершинах, по номерам соответствующих вершин. Такой прием позволяет очень близко подойти в программной реализацией структуры смежности к ее множественному описанию. В этом случае множественное описание выражения в программной реализации

представляется как где количество вершин в структуре смежности для вершины вектор, содержащий все вершины структуры смежности по строкам; номер первой вершины в структуре смежности для соответствующей вершины тогда номер вершины в структуре смежности для

Например, для следующей структуры смежности графа

соответствующие массивы в программной реализации принимают вид

Исходные данные для расчета по программе алгоритма 6.2 представляются в текстовом файле со следующей структурой смежности

• в первой строке файла содержится количество строк в структуре смежности, которое равно числу вершин в графе;

• далее для каждой вершины в отдельной строке указывается номер самой вершины, количество вершин, смежных с данной, и список этих вершин.

Рассмотрим пример расчета по программе алгоритма 6.2 обхода графа, представленного на рис. 6.13. Сплошными линиями отмечены ребра, которые были пройдены во время обхода графа в глубину, пунктирными — обратные ребра.

Рис. 6.13. Пример обхода графа в глубину

Исходные данные структуры смежности графа рис. 6.13 задаются в текстовом файле

Результаты расчетов сохраняются в выходном файле со следующей структурой:

Каждая колонка таблицы выходного файла соответствует прохода графа, где последнее значение является признаком 1 или 0, что отвечает при проходе либо основному ребру, либо обратному.

Алгоритм 6.2. Программа поиска в глубину на простом неориентированном графе

(см. скан)

(см. скан)

(см. скан)

1
Оглавление
email@scask.ru