Скачиваний:
59
Добавлен:
01.05.2014
Размер:
419.33 Кб
Скачать

Алгоритм построения Эйлеровой цепи.

Списки инцидентности.

Каждой вершине сопоставим список, в этом списке все вершины смежные с данным ребром.

[v] VV1V2…

Для изолированной вершины пустой список.

Граф – это массив списков.

[V1]  Для неориентированного графа ребро

(V1,V2) графа вершина в V1 и

[V2]  эта же вершина V2 может быть список

списков.

….

[Vn] 

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

Списки инцидентности

S1 SE={} сюда будем заносить вершины, заносим все подряд.

Stack={V}

S2 If Stack – пуст Stop Граф имеет Эйлерову цепь

S3 else V:=top(stack) – Вытаскиваем верхний элемент

If (SI[V]0) U:=SI[V]; Список инцидентности, не пуст, то вытаскиваем элемент

Del(U,V) в списке для U удаляем V, а в списке для V удаляем U и заносим в стек

Если SI[V]=0, то V SE{} и V удаляем из стека.

Пример:

4

3

5

1 6

8

2

7 9

Список Инцидентности

123

2378

31245

435

53468

65789

72689

82567

967

Stack 1 2,1 3,2,1 1X,3,2,1 4,3,2,1 5,4,3,2,1 3X,5,4,3,2,1 6,5,4,3,2,1

SE 0 0 0 1 1 1 1,3 1,3

Stack 7,6,5,4,3,2,1 2,7,6,5,4,3,2,1 8,2,7,6,5,4,3,2,1 5X,8,2,7,6,5,4,3,2,1

SE 1,3 1,3 1,3 1,3,5

Stack 6,8,2,7,6,5,4,3,2,1 9,6,8,2,7,6,5,4,3,2,1 7,9,6,8,2,7,6,5,4,3,2,1

SE 1,3,5 1,3,5 1,3,5

Удаляем весь стек SE 1,3,5,8,7,9,6,8,2,7,6,5,4,3,2,1

  1. Деревья, каркасы.

Деревья

Определение: Связанный граф не содержащий циклов называется деревом.

Просто граф не содержащий циклов, называется лесом.

Дерево Лес

Теорема: 48

Граф является деревом тогда и только тогда, когда между его двумя вершинами существует одна и только одна цепь.

Доказательство:

Граф – дерево, тогда граф связан и две вершины можно соединить цепью, пусть есть две цепи, тогда из них, можно построить цикл (следствие 2, теорема 43) и наоборот.

Теорема: 49

Дерево содержащее не менее двух вершин имеет, по крайней мере 2 концевые вершины (DegV<1).

Доказательство: Рассмотрим максимальную цепь:

a0x1a1x2…xLaL

Докажем, что deg a0 и aL =1

Пусть deg aL>1, тогда из нее есть ребро aL+1, xLaL причем aL+1ai, иначе получился бы цикл, это не дерево => максимальная цепь удлиняется, значит deg aL>1, тоже для а0.

Лемма: После удаления из дерева концевой вершины вместе с ребром получается дерево.

Теорема: 50 Дерево с Р вершинами имеет Р-1 ребро.

Доказательство: Индукция по P:

1. P=1 - 0 ребер.

2. Индукционный переход Пусть P<=k верно

Докажем для k+1>=2.

Дерево не более двух вершин или 2 концевые вершины (т. 49) по лемме одну концевую вершину убираем, тогда получим,

Для k вершин - k-1 ребро

+ +

1 1

k+1 вершин - k ребер

Определение: Дерево в графе, которое содержит, все его вершины называется каркасом данного графа (стягивающее дерево, покрывающий граф)

Т.е. ребра, которые надо оставить, чтобы сохранилась связанность.

каркас

Теорема: 51 В связанном графе существует по крайней мере 1 каркас.

Доказательство:

  1. Если в связанном графе нет циклов, то это дерево.

  2. Если есть циклы, то удаляем любое ребро из цикла, пока не кончиться цикл.

Пример, построения графа в глубину.

{(V,U)} идет в каркас, мы обойдем все вершины и у нас будет каркас( т.к. не будет циклов), мы не возвращаемся обратно в вершину.

8 9

5 6 7

2 3 4

1

8,5,6,7,4,3,2,1

Т – множество ребер, содержащих каркас.

T={(1,2), (2,3), (3,4), (4,7), (7,6), (6,5), (5,8), (6,9)}

Если граф дерево, то существует 1 каркас, если граф цикл, то – несколько.

Следствие к т.51

1) Граф связан G=(V,E) и есть подмножество ребер FE, для любого цикла графа G существует хотя бы 1 ребро не лежащее в F, тогда можно построить каркас Т, все ребра F будут принадлежать T. T=(V,E`) FE`

Доказательство:

Мы можем удалить ребро из цикла, не принадлежащее F.

2) Связанный граф с Р вершинами и Р-1 ребрами, является деревом.

Доказательство:

Допустим P, P-1, если были бы циклы, то при построении Р вершин, было бы Р ребер, т.е. удаляя 1 ребро получим дерево.

  1. Если связанный граф имеет p вершин и q ребер, то q-p+1 >= 0.

Строя каркас, Р и Р-1 ребер, а в графе больше ребер, чем в каркасе. Следовательно это и будет >= 0.

Определение: Есть произвольный граф p – вершин, q – ребер.

k – число компонент связности, тогда говорят, что :=p-k –называется корангом графа.

:=q-p+k – называется цикломатическим числом графа.

p1q1 p2q2 … pkqk

(V1,E1) (V2,E2) … (Vk,Ek)

k – число компонент связности. Тогда для любой компоненты есть коранг и цикломатическое число.

i:=pi –1 =i=1ki

i:=qi -pi+1 =i=1ki

Теорема: 52

  1. Для любого графа его >=0, т.к. i=qi-pi+1>=0 (Теорема 51)

  2. G – связанный

G – дерево <=> =0 ( необходимый и достаточный признак дерева).

Определение: Пусть есть связанный граф P – вершин, q – ребер

G(V,E), T=(V,E) – стягивающее дерево

XE` - ребра из каркаса называются ветвями, которые не вошли хорды.

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

yE\E` y – хорда

Каждой хорде соответствует главный цикл.

М – главным циклов (сколько хорд)

P – вершин, q – ребер из них вычесть ветви (p-1)

q-(p-1)=

Пример: На главные циклы

x1,x2,x3,x4,x5 – ветви с y1 e y2 циклы: bcedb: y1

y1,y2,y3 – хорды x2 b x3 x4dx5 f defd : y2

ax1 y3 abdfa: y3

Определение: Пусть есть каркас данного графа

Элементарное преобразование дерева. Вводим хорду, получаем цикл, удаляем ветвь, получаем каркас.

  1. Главные циклы и коциклы.

Соседние файлы в папке Шпаргалка по дискретной математике