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

Построение остовного дерева и множества обратных ребер

при поиске в глубину

( Tree of Depth First Search -TDFS )

procedure TDFS ( v, u: Vert );

{ посещаем вершину v и т.д.; u=Отец(v) }

global

NumVert : Array [1..n] of Nat0n; {Nat0n=0..n}

Adj: array [1..n] of ListVert; { списки смежности }

iV: Nat0n; {текущий порядковый номер посещения вершины}

T : SetBr; { множество ветвей остовного дерева }

B : SetBr; { множество хорд (обратных ребер) }

begin

iV := iV + 1; { посетить v}

NumVert[v] := iV;

for  w  Adj[v] do

if NumVert[w]=0 then

begin { <v,w> - ребро (ветвь) остовного дерева }

T := T + { <v,> };

TDFS( w, v)

end

else { w - уже посещалась }

if (NumVert[w] < NumVert[v]) & (w<>u)

then { <v,w> - обратное ребро (хорда) }

B := B + { <v,w> }

{fi}

{fi}

{od}

{ v - использована }

end {TDFS};

Собственно поиск в глубину в графе G=(V,E):

var

V : SetVert; {множество вершин графа G=(V,E), Card(V)=n }

NumVert : Array [1..n] of Nat0n; {Nat0n=0..n}

Adj: array [1..n] of ListVert; { списки смежности }

iV: Nat0n; {текущий порядковый номер посещения вершины}

T : SetBr; { множество ветвей остовного дерева }

B : SetBr; { множество хорд (обратных ребер) }

begin

for  v  V do NumVert[v] := 0;

{ - пометить все вершины как необследованные }

iV := 0;

T := {}; B := {};

for  v  V do

if NumVert[v]=0 then TDFS(v,v )

end

Соседние файлы в папке Алгоритмы на графах (на псевдокоде)