Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / Struktury.docx
Скачиваний:
37
Добавлен:
04.04.2018
Размер:
2.84 Mб
Скачать

Деревья поиска в ширину

Формально говорят для графа j с исходной вершиной S мы определяем подграф предшественния. Графа j. G=(V,E) Gp(V,Ep) Vp={uэ V:p[u]<>nil} U {s}

Ep={(p[u],u):uэVp{s}

Для него vp состоит из вершин достижимых из S и для всех вершин v в графе ? имеется единый простой путь из S[v] одновременно является кратчайшим путем из S[v] для графа j. Предполагая что построено с fSearch.

Procedure pring.path (G,S,u);

U=S

+ *

Print s

Вывод “Путь из S в u отсутствует’’

- +

P[u]=nil

-

Print_path(G,S,p[u])

*

Выв U

End

Поиск в глубину

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

Для фиксации признака просмотренный вершины графа или нет введем такую структуру

Nnew: array [1..N] of Boolean;

Рассмотренная вершина графа или нет. Если Nnew[i] равно истина, то вершина I не просмотрена. Пусть граф представляет матрицу смежности.

A[I,j]= 1,I смежное с j

 0, иначе

Номера просмотренных вершин будем запоминать в стеке st, указатель как yk.

Procedure PGn(v:integer); var st:array [1..N] of integer yk,t,j:integer; ppLboolean;

FillChar (st,sizeof(st),0) yk=0

Inc(yk) st[yk]=u Nnew[v]=False

While Yk<>0

* -

End

+

t=st[yk]

Выв выбранной вершины

Repeat <-

A[t,j] <>0) and (Nnew[j]=true)

Pp=true

+

Pp=true or (j>=N)

-

-

j=j+1

- +

pp=true

inc(yk) st[yk]=j Nnew[j]=false

уk=yk-1

*

найдена смежная вершина или все смежные уже были просмотрены

В рекурсивной

Procedure pg(v:integer); var j:integer;

Nnew[v]=False

Выв V

End

*

J=1 to N

(Avj<>0) and (new[j]=true)

pg(j)

* +

…. Fillchar(nnew,siseof(nnew),true); for I:=1 to n do If nnew[i] then pg[i];

Стягивающие или остовные деревья

Дерево – произвольный, связанный не ориентированный граф без списка. Связанный n вершин и n-1 ребро.

G=(V,E) (V,T) T э E Называется стягивающим деревом, каркас или остов.

Ребра — это дерева называются ветвями, а остальные ребра хордами. Число различный каркасов полного связанного неориентированного помеченного графа с n вершинами NN-2.

Граф из трех вершин

Методы просмотра вершин графа поиска в глубину и ширину позволяет построить каркас. Каждый метод строит 1 каркас.

Порождения всех каркасов графа

Дано: связанный неориентированный граф G=(V,E). Найти все каркасы. Каркасы не запоминаются, а только выводятся. Каждый очередной порождается на базе последнего.

List turn:array [1..N] of integer; Down, //нижний указатель, вершина берем из turn up // верхний указатель Nnew: array pf [1..N] of Boolean // массив признаков tree: array [1..2,1,..(N-1)] of integer; //список ребер образующих каркас numbo //число ребер строящихся в каркасе

Fillchar(nnew,sizeof(Nnew),true); Fillchar(Tree,sizeof(Tree),0); Nnew[1]=False; Turn[1]:=1; Down:=1; Up:=2; Numb:=0;

Граф представлен матрицей смежности. В массиве 3 далее организуем процедуру построения каркаса

1 каркас будем строить обычным поиском в ширину. Затем исключаем последнее ребро и строим новый каркас . Затем исключаем предпоследнюю и строим свой каркас.

Procedure karkas (v,g:integer);

V – вершины из который выходит ребро g – номер вершины из которой нужно искать ребро

Var j:integer;

+

Down>=Up

Exit

J=g

While (j<=N) and (numd<=(N-1))

- +

-

(a[v,j] <> 0) and (Nnew[j])

Inc(j)

While

+

J=g

Nnew[j]=false

Inc(numb)

Tree[1,numb]=V Tree[2,numb]=j

Turn[up]=j inc(up)

Karkas (v,(j+1))

Dec(up) Nnew[j]=True Dec(np),Knew[j]:=True; dec(Numb)

+

Numb=(N-1)

выв каркаса tree

-

Exit

Все ребра из вершины v просмотрены, проходим к следующей вершины из очереди, до тех пор, пока не будет построен каркас

j=N+1

End

Inc(Down)

Karkas(Tuen[down],1)

Dec(down)

Соседние файлы в папке Лекции