27.07.2014 Views

Algorytmy grafowe (AGR 320)

Algorytmy grafowe (AGR 320)

Algorytmy grafowe (AGR 320)

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>)<br />

semestr letni 2004/2005<br />

Michał Karoński<br />

Wydział Matematyki i Informatyki UAM<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


grafy proste<br />

1. Rodzaje grafów<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


grafy proste<br />

multigrafy<br />

1. Rodzaje grafów<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


1. Rodzaje grafów<br />

grafy proste<br />

multigrafy<br />

grafy skierowane (digrafy)<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


1. Rodzaje grafów<br />

grafy proste<br />

multigrafy<br />

grafy skierowane (digrafy)<br />

grafy ważone<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


1. Rodzaje grafów<br />

grafy proste<br />

multigrafy<br />

grafy skierowane (digrafy)<br />

grafy ważone<br />

hipergrafy<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


1. Rodzaje grafów<br />

grafy proste<br />

multigrafy<br />

grafy skierowane (digrafy)<br />

grafy ważone<br />

hipergrafy<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


2. Reprezentacje grafów<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


2. Reprezentacje grafów<br />

2.1 Macierz przyległości (sasiedztwa)<br />

˛<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


2. Reprezentacje grafów<br />

2.1 Macierz przyległości (sasiedztwa)<br />

˛<br />

Definicja (Macierz przyległości). Dany jest graf G = (V,E), przy<br />

czym V = {v 1 ,v 2 ,...,v n } jest zbiorem wierzchołków, to n × n<br />

macierz A(G) = (a ij ), gdzie a ij jest liczba˛<br />

krawędzi łacz ˛ acych ˛<br />

wierzchołki v i oraz v j nazywa się macierza˛<br />

przyległości grafu G.<br />

W przypadku grafu skierowanego a ij jest liczba˛<br />

łuków z wierzchołka<br />

v i do v j .<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


v 3<br />

❅<br />

v<br />

❅ ❅❅❅<br />

1 v 2<br />

v 4<br />

❅<br />

❅ <br />

❅❅❅ <br />

<br />

Rysunek 1: Przykład grafu prostego G = (V,E), gdzie V =<br />

{v 1 ,v 2 ,v 3 ,v 4 ,v 5 },E = {e 1 ,e 2 ,e 3 ,e 4 ,e 5 ,e 6 ,e 7 }, e 1 = v 1 v 2 ,e 2 =<br />

v 2 v 3 ,e 3 = v 2 v 5 ,e 4 = v 3 v 4 ,e 5 = v 2 v 4 ,e 6 = v 4 v 6 ,e 7 = v 1 v 4 .<br />

v 5<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


Przykład . Macierz przyległości dla grafu przedstawionego na<br />

Rysunku 1.<br />

A(G) =<br />

v<br />

⎛ 1 v 2 v 3 v 4 v 5<br />

v 1 0 1 0 1 0<br />

v 2 1 0 1 1 1<br />

v 3 ⎜ 0 1 0 1 0<br />

v 4<br />

⎝ 1 1 1 0 1<br />

v 5 0 1 0 1 0<br />

⎛<br />

⎞<br />

⎟<br />

⎠ = ⎜<br />

⎝<br />

⎞<br />

0 1 0 1 0<br />

1 0 1 1 1<br />

0 1 0 1 0<br />

1 1 1 0 1<br />

⎟<br />

⎠<br />

0 1 0 1 0<br />

.<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


macierz przyległości (sasiedztwa) ˛ A(G) jest macierza˛<br />

binarna ˛ (dla grafu prostego)<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


macierz przyległości (sasiedztwa) ˛ A(G) jest macierza˛<br />

binarna ˛ (dla grafu prostego)<br />

macierz przyległości wymaga |V | 2 = n 2 bitów pamięci<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


macierz przyległości (sasiedztwa) ˛ A(G) jest macierza˛<br />

binarna ˛ (dla grafu prostego)<br />

macierz przyległości wymaga |V | 2 = n 2 bitów pamięci<br />

jeżeli w jest długościa˛<br />

słowa maszynowego, to każdy<br />

wiersz macierzy przyległości można zapisać jako ciag ˛ n<br />

bitów w ⌈n/w⌉ słowach maszynowych (⌈x⌉ oznacza<br />

najmniejsza˛<br />

liczbę całkowita˛<br />

nie mniejsza˛<br />

niż x)<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


macierz przyległości (sasiedztwa) ˛ A(G) jest macierza˛<br />

binarna ˛ (dla grafu prostego)<br />

macierz przyległości wymaga |V | 2 = n 2 bitów pamięci<br />

jeżeli w jest długościa˛<br />

słowa maszynowego, to każdy<br />

wiersz macierzy przyległości można zapisać jako ciag ˛ n<br />

bitów w ⌈n/w⌉ słowach maszynowych (⌈x⌉ oznacza<br />

najmniejsza˛<br />

liczbę całkowita˛<br />

nie mniejsza˛<br />

niż x)<br />

graf prosty: A(G) jest symetryczna - n(n − 1)/2 bitów<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


macierz przyległości (sasiedztwa) ˛ A(G) jest macierza˛<br />

binarna ˛ (dla grafu prostego)<br />

macierz przyległości wymaga |V | 2 = n 2 bitów pamięci<br />

jeżeli w jest długościa˛<br />

słowa maszynowego, to każdy<br />

wiersz macierzy przyległości można zapisać jako ciag ˛ n<br />

bitów w ⌈n/w⌉ słowach maszynowych (⌈x⌉ oznacza<br />

najmniejsza˛<br />

liczbę całkowita˛<br />

nie mniejsza˛<br />

niż x)<br />

graf prosty: A(G) jest symetryczna - n(n − 1)/2 bitów<br />

graf skierowany: n⌈n/w⌉<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


macierz przyległości (sasiedztwa) ˛ A(G) jest macierza˛<br />

binarna ˛ (dla grafu prostego)<br />

macierz przyległości wymaga |V | 2 = n 2 bitów pamięci<br />

jeżeli w jest długościa˛<br />

słowa maszynowego, to każdy<br />

wiersz macierzy przyległości można zapisać jako ciag ˛ n<br />

bitów w ⌈n/w⌉ słowach maszynowych (⌈x⌉ oznacza<br />

najmniejsza˛<br />

liczbę całkowita˛<br />

nie mniejsza˛<br />

niż x)<br />

graf prosty: A(G) jest symetryczna - n(n − 1)/2 bitów<br />

graf skierowany: n⌈n/w⌉<br />

reprezentacja macierzowa jest korzystniejsza dla<br />

grafów gęstych<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


2.2 Macierz incydencji<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


2.2 Macierz incydencji<br />

Definicja<br />

(Macierz incydencji). Dany jest graf G = (V,E), przy czym<br />

V = {v 1 ,v 2 ,...,v n } jest zbiorem wierzchołków natomiast<br />

E = {e 1 ,e 2 ,...,e m } zbiorem krawędzie grafu, to macierz<br />

M(G) = (m ij )1, 1 i n, 1 j m, gdzie liczba<br />

m ij ∈ {0, 1, 2} oznacza ile razy v i oraz e j s ˛<br />

a incydentne ( 2 występuje<br />

w przypadku pętli), jest macierza˛<br />

incydencji grafu G.<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


v 3<br />

❅<br />

v<br />

❅ ❅❅❅<br />

1 v 2<br />

v 4<br />

❅<br />

❅ <br />

❅❅❅ <br />

e 2<br />

e 3<br />

e 1 e 4<br />

e 5<br />

<br />

v 5<br />

e 6<br />

e 7<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


Przykład . Macierz incydencji dla grafu przedstawionego na<br />

Rysunku 1.<br />

G = (V,E): |V | = 5, |E| = 7, V = {v 1 , v 2 , v 3 , v 4 , v 5 }, E = {e 1 ,<br />

e 2 , e 3 , e 4 , e 5 , e 6 , e 7 }, e 1 = v 1 v 2 , e 2 = v 2 v 3 , e 3 = v 2 v 5 , e 4 = v 3 v 4 ,<br />

e 5 = v 2 v 4 , e 6 = v 4 v 5 , e 7 = v 1 v 4 .<br />

M(G) =<br />

e<br />

⎛ 1 e 2 e 3 e 4 e 5 e 6 e 7<br />

v 1 1 0 0 0 0 0 1<br />

v 2 1 1 1 0 1 0 0<br />

v 3 ⎜ 0 1 0 1 0 0 0<br />

v 4<br />

⎝ 0 0 0 1 1 1 1<br />

v 5 0 0 1 0 0 1 0<br />

⎞<br />

⎟<br />

⎠<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p.


Macierz incydencji wymaga |V ||E| bitów pamięci, co<br />

może być liczba˛<br />

większa˛<br />

niż |V | 2 bitów zajmowanych<br />

przez macierz przyległości, ponieważ liczba krawędzi<br />

|E| jest często większa niż liczba wierzchołków |V |.<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


Macierz incydencji wymaga |V ||E| bitów pamięci, co<br />

może być liczba˛<br />

większa˛<br />

niż |V | 2 bitów zajmowanych<br />

przez macierz przyległości, ponieważ liczba krawędzi<br />

|E| jest często większa niż liczba wierzchołków |V |.<br />

W niektórych jednak przypadkach może być<br />

korzystniejsze użycie macierzy incydencji, niż macierzy<br />

przyległości pomimo zwiększonej zajętości pamięci.<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


Macierz incydencji wymaga |V ||E| bitów pamięci, co<br />

może być liczba˛<br />

większa˛<br />

niż |V | 2 bitów zajmowanych<br />

przez macierz przyległości, ponieważ liczba krawędzi<br />

|E| jest często większa niż liczba wierzchołków |V |.<br />

W niektórych jednak przypadkach może być<br />

korzystniejsze użycie macierzy incydencji, niż macierzy<br />

przyległości pomimo zwiększonej zajętości pamięci.<br />

Macierze incydencji sa˛<br />

szczególnie dogodne przy<br />

rozpatrywaniu obwodów elektrycznych i układów<br />

przełaczaj ˛ acych. ˛<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


2.3 Lista krawędzi<br />

Innym, często stosowanym sposobem reprezentacji<br />

grafu jest wypisanie wszystkich jego krawędzi jako par<br />

wierzchołków. Tak na przykład, graf z Rysunku 1 byłby<br />

przedstawiony jako lista następujacych<br />

˛<br />

nieuporzadkowanych ˛<br />

par:<br />

(v 1 ,v 2 ), {v 1 ,v 4 }, {v 2 ,v 3 }, {v 2 ,v 4 }, {v 2 ,v 5 }, {v 3 ,v 4 }, {v 4 ,v 5 }.<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


2.3 Lista krawędzi<br />

Innym, często stosowanym sposobem reprezentacji<br />

grafu jest wypisanie wszystkich jego krawędzi jako par<br />

wierzchołków. Tak na przykład, graf z Rysunku 1 byłby<br />

przedstawiony jako lista następujacych<br />

˛<br />

nieuporzadkowanych ˛<br />

par:<br />

(v 1 ,v 2 ), {v 1 ,v 4 }, {v 2 ,v 3 }, {v 2 ,v 4 }, {v 2 ,v 5 }, {v 3 ,v 4 }, {v 4 ,v 5 }.<br />

Dla grafu skierowanego, były by to uporzadkowane ˛ pary<br />

wierzchołków odpowiadajace ˛ łukom.<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


liczba bitów potrzebna do zaetykietowania (etykietami<br />

od 1 do n) wierzchołków grafu G jest równa b, gdzie<br />

2 b−1 < n 2 b , czyli b = ⌊log 2 n⌋ + 1<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


liczba bitów potrzebna do zaetykietowania (etykietami<br />

od 1 do n) wierzchołków grafu G jest równa b, gdzie<br />

2 b−1 < n 2 b , czyli b = ⌊log 2 n⌋ + 1<br />

całkowita zajętość pamięci jest równa 2|E|b bitów<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


liczba bitów potrzebna do zaetykietowania (etykietami<br />

od 1 do n) wierzchołków grafu G jest równa b, gdzie<br />

2 b−1 < n 2 b , czyli b = ⌊log 2 n⌋ + 1<br />

całkowita zajętość pamięci jest równa 2|E|b bitów<br />

ten sposób reprezentacji jest bardziej ekonomiczny niż<br />

macierz przyległości, jeżeli 2|E|b < |V | 2 <strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


liczba bitów potrzebna do zaetykietowania (etykietami<br />

od 1 do n) wierzchołków grafu G jest równa b, gdzie<br />

2 b−1 < n 2 b , czyli b = ⌊log 2 n⌋ + 1<br />

całkowita zajętość pamięci jest równa 2|E|b bitów<br />

ten sposób reprezentacji jest bardziej ekonomiczny niż<br />

macierz przyległości, jeżeli 2|E|b < |V | 2<br />

reprezentacja “listowa" jest korzystniejsza dla grafów<br />

rzadkich<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


liczba bitów potrzebna do zaetykietowania (etykietami<br />

od 1 do n) wierzchołków grafu G jest równa b, gdzie<br />

2 b−1 < n 2 b , czyli b = ⌊log 2 n⌋ + 1<br />

całkowita zajętość pamięci jest równa 2|E|b bitów<br />

ten sposób reprezentacji jest bardziej ekonomiczny niż<br />

macierz przyległości, jeżeli 2|E|b < |V | 2<br />

reprezentacja “listowa" jest korzystniejsza dla grafów<br />

rzadkich<br />

przechowywanie i przekształcanie grafu w komputerze<br />

jest trudniejsze (na przykład przy badaniu spójności<br />

grafu)<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


2.4 Dwie tablice liniowe<br />

modyfikacja˛<br />

listy krawędzi - przedstawienie grafu za<br />

pomoca˛<br />

dwóch tablic liniowych:<br />

F = (f 1 ,f 2 ,...,f e ), H = (h 1 ,h 2 ,...,h e ).<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


2.4 Dwie tablice liniowe<br />

modyfikacja˛<br />

listy krawędzi - przedstawienie grafu za<br />

pomoca˛<br />

dwóch tablic liniowych:<br />

F = (f 1 ,f 2 ,...,f e ), H = (h 1 ,h 2 ,...,h e ).<br />

elementy tablic: etykiety wierzchołków, e = |E|<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


2.4 Dwie tablice liniowe<br />

modyfikacja˛<br />

listy krawędzi - przedstawienie grafu za<br />

pomoca˛<br />

dwóch tablic liniowych:<br />

F = (f 1 ,f 2 ,...,f e ), H = (h 1 ,h 2 ,...,h e ).<br />

elementy tablic: etykiety wierzchołków, e = |E|<br />

G graf skierowany: i-ty łuk, e i , prowadzi od wierzchołka<br />

f i , do wierzchołka h i<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


2.4 Dwie tablice liniowe<br />

modyfikacja˛<br />

listy krawędzi - przedstawienie grafu za<br />

pomoca˛<br />

dwóch tablic liniowych:<br />

F = (f 1 ,f 2 ,...,f e ), H = (h 1 ,h 2 ,...,h e ).<br />

elementy tablic: etykiety wierzchołków, e = |E|<br />

G graf skierowany: i-ty łuk, e i , prowadzi od wierzchołka<br />

f i , do wierzchołka h i<br />

G graf nieskierowany: krawędź e i łaczy ˛ f i i h i .<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


2.4 Dwie tablice liniowe<br />

modyfikacja˛<br />

listy krawędzi - przedstawienie grafu za<br />

pomoca˛<br />

dwóch tablic liniowych:<br />

F = (f 1 ,f 2 ,...,f e ), H = (h 1 ,h 2 ,...,h e ).<br />

elementy tablic: etykiety wierzchołków, e = |E|<br />

G graf skierowany: i-ty łuk, e i , prowadzi od wierzchołka<br />

f i , do wierzchołka h i<br />

G graf nieskierowany: krawędź e i łaczy ˛ f i i h i .<br />

dogodna reprezentacja do sortowania w grafach<br />

ważonych<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


Przykład . Dwie tablice liniowe dla grafu przedstawionego na<br />

Rysunku 1.<br />

v 3<br />

e ❅ 2 ❅<br />

e 3 ❅<br />

v 1 e 1<br />

v 2 e 4 ❅❅ v 4<br />

❅<br />

❅❅ <br />

e 5<br />

❅ <br />

e 6<br />

e 7<br />

<br />

v 5<br />

F = (v 1 ,v 2 ,v 2 ,v 3 ,v 2 ,v 4 ,v 1 ), H = (v 2 ,v 3 ,v 5 ,v 4 ,v 4 ,v 5 ,v 4 ).<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


2.5 Lista wierzchołków sasiednich ˛ (następników)<br />

efektywna metoda reprezentacji grafów stosowana w<br />

przypadku gdy stosunek |E|/|V | nie jest duży<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


2.5 Lista wierzchołków sasiednich ˛ (następników)<br />

efektywna metoda reprezentacji grafów stosowana w<br />

przypadku gdy stosunek |E|/|V | nie jest duży<br />

dla każdego wierzchołka v tworzymy listę (tablicę),<br />

której pierwszym elementem jest v; a pozostałymi<br />

elementami sa:<br />

˛<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


2.5 Lista wierzchołków sasiednich ˛ (następników)<br />

efektywna metoda reprezentacji grafów stosowana w<br />

przypadku gdy stosunek |E|/|V | nie jest duży<br />

dla każdego wierzchołka v tworzymy listę (tablicę),<br />

której pierwszym elementem jest v; a pozostałymi<br />

elementami sa:<br />

˛<br />

wierzchołki będace ˛ sasiadami ˛ wierzchołka v<br />

(w przypadku grafu nieskierowanego)<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


2.5 Lista wierzchołków sasiednich ˛ (następników)<br />

efektywna metoda reprezentacji grafów stosowana w<br />

przypadku gdy stosunek |E|/|V | nie jest duży<br />

dla każdego wierzchołka v tworzymy listę (tablicę),<br />

której pierwszym elementem jest v; a pozostałymi<br />

elementami sa:<br />

˛<br />

wierzchołki będace ˛ sasiadami ˛ wierzchołka v<br />

(w przypadku grafu nieskierowanego)<br />

bezpośredni następnicy wierzchołka v, tzn.<br />

wierzchołki, do których istnieje łuk z wierzchołka v<br />

(w przypadku grafu skierowanego)<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


v 3<br />

❅<br />

v<br />

<br />

❅ ❅❅❅<br />

1 v 2<br />

v 4<br />

❅ <br />

❅❅❅❅ <br />

<br />

<br />

v 5<br />

v 1 : v 2 , v 4<br />

v 2 : v 1 , v 3 , v 4 , v 5<br />

v 3 : v 2 , v 4<br />

v 4 : v 1 , v 2 , v 3 , v 5<br />

v 5 : v 2 , v 4<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


1 2<br />

5<br />

3 4<br />

6<br />

1<br />

2<br />

3<br />

2<br />

1<br />

3<br />

4<br />

6<br />

3<br />

4<br />

1<br />

2<br />

2<br />

3<br />

4<br />

5<br />

5<br />

4<br />

6<br />

6<br />

2<br />

5<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


1 2<br />

5<br />

3 4<br />

6<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

2<br />

4 6<br />

1 2 4<br />

5<br />

6<br />

6<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


3. Przeszukiwanie grafów<br />

Znajdujac ˛ się w pewnym wierzchołku v przeszukujemy<br />

wszystkie krawędzie incydentne do v, a następnie<br />

poruszamy się do pewnego wierzchołka przyległego w.<br />

W wierzchołku w przeszukujemy wszystkie krawędzie<br />

incydentne do w. Ten proces prowadzi się dotad, ˛ aż<br />

przeszuka się wszystkie wierzchołki w grafie. Metodę tę<br />

nazywa się przeszukiwaniem wszerz (ang. breadth-first<br />

search, często oznaczane skrótowo BFS).<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 1


zamiast przeszukiwać każda˛<br />

krawędź incydentna˛<br />

do<br />

wierzchołka v, poruszamy się do pewnego wierzchołka<br />

przyległego w (wierzchołka, w którym dotychczas<br />

jeszcze nie byliśmy), gdy tylko to jest możliwe,<br />

pozostawiajac ˛ na razie wierzchołek v z być może<br />

niezbadanymi krawędziami. Inaczej mówiac, ˛ podażamy<br />

˛<br />

przez graf ścieżka˛<br />

przechodzac ˛ do nowego<br />

wierzchołka, gdy tylko to jest możliwe. Taka metoda<br />

przeszukiwania grafu, zwana przeszukiwaniem w głab<br />

˛<br />

(ang. depth-first search, w skrócie DFS) lub metoda˛<br />

powrotu po tej samej ścieżce na grafie.<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 2


zamiast przeszukiwać każda˛<br />

krawędź incydentna˛<br />

do<br />

wierzchołka v, poruszamy się do pewnego wierzchołka<br />

przyległego w (wierzchołka, w którym dotychczas<br />

jeszcze nie byliśmy), gdy tylko to jest możliwe,<br />

pozostawiajac ˛ na razie wierzchołek v z być może<br />

niezbadanymi krawędziami. Inaczej mówiac, ˛ podażamy<br />

˛<br />

przez graf ścieżka˛<br />

przechodzac ˛ do nowego<br />

wierzchołka, gdy tylko to jest możliwe. Taka metoda<br />

przeszukiwania grafu, zwana przeszukiwaniem w głab<br />

˛<br />

(ang. depth-first search, w skrócie DFS) lub metoda˛<br />

powrotu po tej samej ścieżce na grafie.<br />

upraszcza wiele algorytmów teorii grafów, ze względu<br />

na otrzymywane ponumerowanie wierzchołków<br />

i skierowanie krawędzi.<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 2


3.1 Przeszukiwanie grafu wszerz (BFS)<br />

G = (V,E) - graf nieskierowanym reprezentowanym w<br />

postaci listy wierzchołków sasiednich.<br />

˛<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 2


3.1 Przeszukiwanie grafu wszerz (BFS)<br />

G = (V,E) - graf nieskierowanym reprezentowanym w<br />

postaci listy wierzchołków sasiednich.<br />

˛<br />

x - ustalony wierzchołek z którego należy rozpoczać<br />

˛<br />

przeszukiwanie grafu<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 2


3.1 Przeszukiwanie grafu wszerz (BFS)<br />

G = (V,E) - graf nieskierowanym reprezentowanym w<br />

postaci listy wierzchołków sasiednich.<br />

˛<br />

x - ustalony wierzchołek z którego należy rozpoczać<br />

˛<br />

przeszukiwanie grafu<br />

I v - tablica zawierajaca ˛ wierzchołki incydentne z v<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 2


3.1 Przeszukiwanie grafu wszerz (BFS)<br />

G = (V,E) - graf nieskierowanym reprezentowanym w<br />

postaci listy wierzchołków sasiednich.<br />

˛<br />

x - ustalony wierzchołek z którego należy rozpoczać<br />

˛<br />

przeszukiwanie grafu<br />

I v - tablica zawierajaca ˛ wierzchołki incydentne z v<br />

NI v liczba elementów w I v<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 2


1. Ustaw: Numer[x] ← 1, Drzewo ← ∅, Pozostale ← ∅;<br />

dopisz x do Kolejki.<br />

2. Jeżeli Kolejka jest pusta to STOP.<br />

3. Pobierz element z Kolejki i zapisz go jako v.<br />

4. Dla każdego wierzchołka w incydentnego do v wykonaj:<br />

(a) Jeżeli Numer[w] = 0, tzn. wierzchołek w<br />

odwiedzamy po raz pierwszy, to nadaj wierzchołkowi<br />

w kolejny numer, dopisz w do Kolejki, a krawędź vw<br />

dodaj do Drzewo.<br />

(b) Jeżeli Numer[w] ≠ 0, tzn. wierzchołek w już był<br />

odwiedzany, natomiast krawędź vw /∈ Drzewo to<br />

dodaj ja˛<br />

do zbioru Pozostale.<br />

5. Wróć do kroku 2.<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 2


¡<br />

¢<br />

£<br />

¤<br />

¦<br />

§¨©<br />

¥<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

¨<br />

£<br />

<br />

<br />

§<br />

£<br />

£<br />

£<br />

¤<br />

£<br />

¥<br />

£<br />

<br />

£<br />

<br />

£<br />

<br />

<br />

<br />

<br />

<br />

© £ <br />

<br />

<br />

£<br />

<br />

(G, x)<br />

Numer[x] ← Ponumerowano ← 1<br />

NKolejka ← 1; Kolejka[NKolejka] ← x<br />

NKolejka > 0<br />

v ← K olejka[1]<br />

NKolejka ← NKolejka − 1<br />

i ← 1<br />

NKolejka<br />

Kolejka[i] ← K olejka[i + 1]<br />

<br />

<br />

i ← 1<br />

NIv w ← I v [i]<br />

<br />

<br />

Numer[w] = 0<br />

Ponumerowano ← P onumerowano + 1<br />

Numer[w] ← Ponumerowano<br />

Drzewo ← Drzewo ∪ {vw}<br />

NKolejka ← NKolejka + 1<br />

Kolejka[NKolejka] ← w<br />

←<br />

∪ {vw}<br />

!Numer, Drzewo,<br />

<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 2


3<br />

12<br />

0<br />

- .<br />

/<br />

+ ,<br />

+ ,<br />

' ()* &<br />

"#$<br />

%<br />

2 > 3<br />

:; K 3<br />

2 >> 3<br />

2 >? 3<br />

2 >@ 3<br />

2 >C 3<br />

2 >E 3<br />

2 >F 3<br />

2 >H 3<br />

2 >I 3<br />

2<br />

✌<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 2


tz<br />

q<br />

_<br />

P<br />

Q P Rà<br />

l R<br />

U<br />

V kn<br />

k P okbcdce<br />

Sk<br />

Przykład . Przeszukiwanie grafu wszerz<br />

✎<br />

OP QRS<br />

TU VWXY<br />

XZ<br />

[<br />

\]^<br />

G,x<br />

☞<br />

r s tu<br />

v wxys<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NKolejka ← 1; Kolejka[NKolejka] ← x<br />

jVTPkNKolejka > 0<br />

⎧<br />

v ← Kolejka[1]<br />

NKolejka ← NKolejka − 1<br />

m RSi ← 1<br />

b cdce<br />

f g<br />

U RNKolejka<br />

h i<br />

a = 1<br />

✍<br />

⎪⎨<br />

⎪⎩<br />

l RKolejka[i] ← Kolejka[i + 1]<br />

m RSi ← 1<br />

l R<br />

⎧<br />

w ← I v [i]<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ ⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NKolejka ← NKolejka + 1<br />

⎪⎩<br />

Kolejka[NKolejka] ← w<br />

⎪⎩<br />

T m<br />

U RNIv<br />

U pSn(Numer,Drzewo,<br />

b cdce<br />

f g<br />

f g<br />

h i← b cdce<br />

h i)<br />

f g<br />

h i∪ {vw}<br />

b<br />

c<br />

d e f g<br />

Numer[a] ← 1<br />

✌<br />

Ponumerow ← 1<br />

Kolejka ← a<br />

NKolejka ← 1<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 2


ª «<br />

¤ ¢¥ ¦£§¨©<br />

‹<br />

‡<br />

ˆ‰Š<br />

„†<br />

€ ‚ƒ„…<br />

‘<br />

Ž<br />

|<br />

}<br />

‘<br />

Ž<br />

—<br />

‘<br />

Ž<br />

—<br />

✎<br />

{| }~<br />

G,x<br />

☞<br />

ž Ÿ ¡ ¢£<br />

a<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NKolejka ← 1; Kolejka[NKolejka] ← x<br />

–‚€|—NKolejka ⎧<br />

> 0<br />

v ← Kolejka[1]<br />

NKolejka ← NKolejka − 1<br />

~NKolejka<br />

˜~Kolejka[i] ← Kolejka[i + 1]<br />

⎧<br />

~NIv<br />

⎪⎨<br />

w ← I v [i]<br />

Numer[w] ⎧<br />

= 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨<br />

⎪⎨<br />

Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NKolejka ← NKolejka + 1<br />

⎪⎩<br />

Kolejka[NKolejka] ← w<br />

⎪⎩<br />

⎪⎩<br />

| ~ Œ<br />

’ “ ” •<br />

✍<br />

˜~<br />

~i ← 1 ~i ← 1 ˜~<br />

€ <br />

‘<br />

‚ —š | ›—Ž ’ “<br />

” •←<br />

’ “<br />

” •∪ {vw}<br />

œš(Numer,Drzewo,<br />

’ “<br />

a = 1<br />

b = 2 c = 3<br />

d e f g<br />

v ← a Kolejka ← ∅ NKolejka ← 0<br />

” •)<br />

✌<br />

w ← b<br />

Ponumerow ← 2 Numer[b] ← 2<br />

Drzewo ← {ab}<br />

Kolejka ← b NKolejka ← 1<br />

w ← c<br />

Ponumerow ← 3 Numer[c] ← 3<br />

Drzewo ← {ab,ac}<br />

Kolejka ← b,c NKolejka ← 2<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 2


Ï ÐÑ<br />

Î<br />

¼<br />

¸<br />

¹º»<br />

­<br />

® ­¯½ ¾<br />

²<br />

³ ÈË<br />

È ­ ÌÈ¿ÀÁÀÂ<br />

°È<br />

✎<br />

¬­ ®¯°<br />

±² ³´µ µ·<br />

G,x<br />

☞<br />

Ò ÓÔ Ñ Õ ÓÖ ×ÔØÙÚ<br />

Û Ü Ñb<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NKolejka ← 1; Kolejka[NKolejka] ← x<br />

dz±­ÈNKolejka > 0<br />

✍<br />

ɯ<br />

⎪⎩<br />

ɯ<br />

⎪⎩<br />

± Ê<br />

¿ ÀÁÀÂ<br />

à Ä<br />

⎧<br />

v ← Kolejka[1]<br />

NKolejka ← NKolejka − 1<br />

ʯ°i ← 1 ²¯NKolejka<br />

ɯKolejka[i] ← Kolejka[i + 1]<br />

ʯ°i<br />

⎪⎨<br />

← ⎧ 1 ²¯NIv<br />

w ← I v [i]<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ ⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NKolejka ← NKolejka + 1<br />

⎪⎩<br />

Kolejka[NKolejka] ← w<br />

² Í°Ë(Numer,Drzewo,<br />

¿ ÀÁÀÂ<br />

à Ä<br />

à Ä<br />

Å Æ← ¿ ÀÁÀÂ<br />

Å Æ<br />

Å Æ)<br />

à Ä<br />

Å Æ∪ {vw}<br />

a = 1<br />

b = 2 c = 3<br />

d = 4 e = 5 f g<br />

v ← b Kolejka ← c NKolejka ← 1<br />

w ← a w ← c w ← d<br />

Ponumerow ← 4 Numer[d] ← 4 Drzewo ← {ab,ac,<br />

✌<br />

Kolejka ← c,d NKolejka ← 2<br />

w ← e<br />

Ponumerow ← 5 Numer[e] ← 5 Drzewo ← {ab,ac,bd<br />

Kolejka ← c,d,e NKolejka ← 3<br />

w ← f<br />

Ponumerow ← 6 Numer[f] ← 6 Drzewo ← {ab,ac,bd,<br />

Kolejka ← c,d,e,f NKolejka ← 4<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 2


¤§¨¥©<br />

¢<br />

¦<br />

¡<br />

¢ £¤¥<br />

ÿ<br />

í<br />

Þ<br />

ß Þ à î ï<br />

ú à<br />

ã<br />

ä ùü<br />

ù Þ ýùðñòñó<br />

áù<br />

✎<br />

ÝÞ ßàá<br />

âã äåæç<br />

æè<br />

é<br />

êëì<br />

G,x<br />

☞<br />

¢c<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NKolejka ← 1; Kolejka[NKolejka] ← x<br />

øäâÞùNKolejka > 0<br />

⎧<br />

v ← Kolejka[1]<br />

NKolejka ← NKolejka − 1<br />

û àái ← 1<br />

ð ñòñó<br />

ô õ<br />

ã àNKolejka<br />

ö ÷<br />

⎪⎨<br />

⎪⎩<br />

ú àKolejka[i] ← Kolejka[i + 1]<br />

a = 1<br />

b = 2 c = 3<br />

û àái ← 1<br />

ã àNIv<br />

✍<br />

ú à<br />

⎧<br />

w ← I v [i]<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ ⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NKolejka ← NKolejka + 1<br />

⎪⎩<br />

Kolejka[NKolejka] ← w<br />

⎪⎩<br />

â û<br />

ô õ<br />

ö ÷← ð ñòñó<br />

ô õ<br />

ö ÷∪ {vw}<br />

d = 4 e = 5 f = 6 g = 7<br />

v ← c Kolejka ← d,e,f NKolejka ← 3<br />

w ← a w ← b w ← f w ← g<br />

ã þáü(Numer,Drzewo,<br />

ð ñòñó<br />

ô õ<br />

ö ÷)<br />

✌<br />

Ponumerow ← 7 Numer[g] ← 7<br />

Drzewo ← {ab,ac,bd,be,bf,cg}<br />

Kolejka ← d,e,f,g NKolejka ← 4<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 2


58 96:;<<br />

3<br />

7<br />

0<br />

<br />

<br />

<br />

<br />

<br />

! "#"$<br />

%&<br />

<br />

<br />

)<br />

+ <br />

+ <br />

<br />

*-<br />

%&<br />

%&<br />

*<br />

! "#"$<br />

%&<br />

✎<br />

<br />

<br />

G,x<br />

☞<br />

1 23<br />

4 56<br />

= > 3d<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NKolejka ← 1; Kolejka[NKolejka] ← x<br />

⎧<br />

v ← Kolejka[1]<br />

NKolejka ← NKolejka − 1<br />

*NKolejka > 0<br />

, i ← 1<br />

NKolejka<br />

' (<br />

⎪⎨<br />

⎪⎩<br />

+ Kolejka[i] ← Kolejka[i + 1]<br />

a = 1<br />

b = 2 c = 3<br />

⎧<br />

w ← I v [i]<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ ⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NKolejka ← NKolejka + 1<br />

⎪⎩<br />

Kolejka[NKolejka] ← w<br />

⎪⎩<br />

, i ← 1<br />

,<br />

NIv<br />

.*!"#"$<br />

' (← ! "#"$<br />

' (∪ {vw}<br />

d = 4 e = 5 f = 6 g = 7<br />

v ← d Kolejka ← e,f,g NKolejka ← 3<br />

w ← b w ← e<br />

✍<br />

*<br />

✌<br />

' ()<br />

/-(Numer,Drzewo,<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 2


fi jgklm<br />

d<br />

h<br />

a<br />

O<br />

MN<br />

HJ<br />

K<br />

L<br />

R STSU<br />

VW<br />

@<br />

A @ B P Q<br />

Z<br />

\ B<br />

\ B<br />

E<br />

F [^<br />

VW<br />

VW<br />

[<br />

R STSU<br />

VW<br />

✎<br />

?@ ABC<br />

D EFGHI<br />

G,x<br />

☞<br />

b cd<br />

e fg<br />

n o de<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NKolejka ← 1; Kolejka[NKolejka] ← x<br />

⎧<br />

v ← Kolejka[1]<br />

NKolejka ← NKolejka − 1<br />

FD@ [NKolejka > 0<br />

] BCi ← 1<br />

E BNKolejka<br />

X Y<br />

⎪⎨<br />

⎪⎩<br />

\ BKolejka[i] ← Kolejka[i + 1]<br />

a = 1<br />

b = 2 c = 3<br />

⎧<br />

w ← I v [i]<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ ⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NKolejka ← NKolejka + 1<br />

⎪⎩<br />

Kolejka[NKolejka] ← w<br />

⎪⎩<br />

] BCi ← 1<br />

D ]<br />

E BNIv<br />

@ _[RSTSU<br />

X Y← R STSU<br />

X Y∪ {vw}<br />

d = 4 e = 5 f = 6 g = 7<br />

v ← e Kolejka ← f,g NKolejka ← 2<br />

w ← b w ← d w ← f<br />

✍<br />

C[<br />

E`C^(Numer,Drzewo,<br />

X Y)<br />

✌<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 3


•<br />

<br />

’<br />

€<br />

~<br />

y{<br />

|<br />

}<br />

q<br />

r q s‚<br />

‹<br />

s<br />

v<br />

w Œ<br />

s<br />

Œ<br />

✎<br />

pq rst<br />

u vwxyz<br />

G,x<br />

☞<br />

“ ”•<br />

– —˜<br />

—š ›˜œ<br />

Ÿ ž<br />

•f<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NKolejka ← 1; Kolejka[NKolejka] ← x<br />

⎧<br />

v ← Kolejka[1]<br />

NKolejka ← NKolejka − 1<br />

wuq ŒNKolejka > 0<br />

Ž sti ← 1<br />

ƒ „…„†<br />

v sNKolejka<br />

‡ˆ ‰ Š<br />

⎪⎨<br />

⎪⎩<br />

sKolejka[i] ← Kolejka[i + 1]<br />

a = 1<br />

b = 2 c = 3<br />

⎧<br />

w ← I v [i]<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ ⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NKolejka ← NKolejka + 1<br />

⎪⎩<br />

Kolejka[NKolejka] ← w<br />

Ž sti ← 1<br />

⎪⎩<br />

u Ž<br />

v sNIv<br />

q Œƒ„…„†<br />

‡ˆ<br />

‰ Š← ƒ „…„†<br />

‡ˆ<br />

‰ Š∪ {vw}<br />

✍<br />

tŒ v ‘t<br />

(Numer,Drzewo,<br />

‡ˆ<br />

ƒ „…„†<br />

d = 4 e = 5 f = 6 g = 7<br />

v ← f Kolejka ← g NKolejka ← 1<br />

w ← b w ← c w ← g<br />

‰ Š)<br />

✌<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 3


ÈË ÌÉÍÎÏ<br />

Æ<br />

Ê<br />

Ã<br />

±<br />

­<br />

®<br />

¯°<br />

¢<br />

£ ¢ ¤ ² ³<br />

¼<br />

¾ ¤<br />

§<br />

¨½À<br />

½<br />

✎<br />

¡¢ £¤¥<br />

¦ §¨©ª« ª¬<br />

G,x<br />

☞<br />

Ä ÅÆ<br />

Ç ÈÉ<br />

Ð Ñ Æg<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NKolejka ← 1; Kolejka[NKolejka] ← x<br />

¨¦¢ ½NKolejka > 0<br />

´µµ· ¸¹ º »<br />

⎧<br />

v ← Kolejka[1]<br />

NKolejka ← NKolejka − 1<br />

¿ ¤¥i ← 1<br />

§ ¤NKolejka<br />

⎪⎨<br />

⎪⎩<br />

¾ ¤Kolejka[i] ← Kolejka[i + 1]<br />

a = 1<br />

b = 2 c = 3<br />

¿ ¤¥i ← 1<br />

§ ¤NIv<br />

✍<br />

¾ ¤<br />

⎧<br />

w ← I v [i]<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ ⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NKolejka ← NKolejka + 1<br />

⎪⎩<br />

Kolejka[NKolejka] ← w<br />

⎪⎩<br />

¦ ¿<br />

¢ Á½´µµ· ¸¹<br />

º »←<br />

¸¹<br />

´µµ· ¸¹<br />

º »∪ {vw}<br />

¥½<br />

§ Â¥À(Numer,Drzewo, ´µµ·<br />

d = 4 e = 5 f = 6 g = 7<br />

v ← g Kolejka ← ∅ NKolejka ← 0<br />

w ← c w ← f<br />

º »)<br />

✌<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 3


3.2 Przeszukiwanie grafu w głab ˛ (DFS)<br />

G = (V,E) - graf nieskierowanym reprezentowanym w<br />

postaci listy wierzchołków sasiednich.<br />

˛<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 3


3.2 Przeszukiwanie grafu w głab ˛ (DFS)<br />

G = (V,E) - graf nieskierowanym reprezentowanym w<br />

postaci listy wierzchołków sasiednich.<br />

˛<br />

x - ustalony wierzchołek z którego należy rozpoczać<br />

˛<br />

przeszukiwanie grafu<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 3


3.2 Przeszukiwanie grafu w głab ˛ (DFS)<br />

G = (V,E) - graf nieskierowanym reprezentowanym w<br />

postaci listy wierzchołków sasiednich.<br />

˛<br />

x - ustalony wierzchołek z którego należy rozpoczać<br />

˛<br />

przeszukiwanie grafu<br />

I v - tablica zawieraj ˛ aca wierzchołki incydentne z v, NI v<br />

liczba elementów w I v<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 3


3.2 Przeszukiwanie grafu w głab ˛ (DFS)<br />

G = (V,E) - graf nieskierowanym reprezentowanym w<br />

postaci listy wierzchołków sasiednich.<br />

˛<br />

x - ustalony wierzchołek z którego należy rozpoczać<br />

˛<br />

przeszukiwanie grafu<br />

I v - tablica zawierajaca ˛ wierzchołki incydentne z v, NI v<br />

liczba elementów w I v<br />

Stos - tablica przechowujaca ˛ ciag ˛ wierzchołków<br />

umożliwiajaca ˛ “powrót", NStos - liczba wierzchołków w<br />

Stos<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 3


1. Ustaw v ← x, i ← 0, Drzewo ← ∅, Pozostale ← ∅.<br />

2. Ustaw i ← i + 1, Numer(v) ← i.<br />

3. Poszukaj nieprzebytej krawędzi incydentnej do<br />

wierzchołka v.<br />

Jeżeli nie ma takiej krawędzi (tzn. po każdej krawędzi<br />

incydentnej do v już przeszliśmy), to przejdź do kroku 5.<br />

Wybierz pierwsza˛<br />

nieprzebyta˛<br />

krawędź incydentna˛<br />

do<br />

wierzchołka v, powiedzmy vw i przejdź ja.<br />

˛<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 3


4. Jesteśmy teraz w wierzchołku w.<br />

Jeżeli w jest wierzchołkiem, w którym jeszcze nie<br />

byliśmy podczas tego szukania (tzn. Numer(w) jest<br />

nieokreślony), to dodaj krawędź vw do zbioru Drzewo.<br />

Ustaw v ← w i przejdź do kroku 2.<br />

Jeżeli w jest wierzchołkiem, w którym już wcześniej<br />

byliśmy (tzn. Numer(w) < Numer(v)), to dodaj krawędź<br />

vw do zbioru Pozostale. Przejdź do kroku 3. Jesteśmy<br />

więc z powrotem w wierzchołku v.<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 3


5. Sprawdź, czy istnieje jakaś przebyta krawędź uv w<br />

zbiorze Drzewo z Numer(u) < Numer(v).<br />

Jeżeli jest taka krawędź, to wróć do wierzchołka u.<br />

(Zauważmy, że u jest wierzchołkiem, z którego<br />

osiagnięto ˛ v po raz pierwszy). Ustaw v ← u i przejdź do<br />

kroku 3.<br />

Jeżeli nie ma takiej krawędzi, to zatrzymaj algorytm<br />

(jesteśmy z powrotem w korzeniu x po przejściu każdej<br />

krawędzi i odwiedzeniu każdego wierzchołka<br />

połaczonego ˛ z x).<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 3


Ò<br />

Ó<br />

Ô<br />

Õ<br />

Ö<br />

Ø<br />

ÙÚÛÜ<br />

×<br />

Ý<br />

Ú á<br />

à<br />

ã<br />

ÙÜ<br />

â<br />

Ü<br />

Ûæ Ü<br />

å<br />

ç<br />

è<br />

Õ<br />

ê<br />

Ú á<br />

Õ<br />

Õ<br />

ã<br />

ÙÜ<br />

Õ<br />

Ö<br />

Õ<br />

×<br />

Õ<br />

Ý<br />

Õ<br />

à<br />

Õ<br />

â<br />

ïð<br />

ñò<br />

ïð<br />

ñò<br />

Ü<br />

Ûæ Ü<br />

Õ<br />

å<br />

ïð<br />

ñò<br />

ë ìíìî<br />

ú øû÷üýù<br />

ô õö÷ø ù<br />

éÜ<br />

ã óéä<br />

Õ<br />

ç<br />

(G, x)<br />

Numer[x] ← Ponumerow ← 1<br />

NStos ← 1 Stos[NStos] ← x<br />

NStos > 0<br />

Þ ßv ← S Tos[NStos]<br />

NI v = 0<br />

äNStos ← N Stos − 1<br />

w ← I v [1]<br />

NI v ← NI v − 1<br />

i ← 1<br />

á ßé<br />

ßNIv ã ßIv<br />

Þ<br />

[i] ← I v [i − 1]<br />

Numer[w] = 0<br />

äPonumerow ← P onumerow + 1<br />

Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NStos ← Nstos + 1<br />

Stos[NStos] ← w<br />

← ∪ {vw}<br />

ë ìíìî<br />

ë ìíìî<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 3


© <br />

<br />

§ ¨<br />

§ ¨<br />

£ ¤¥¦ ¢<br />

þÿ<br />

¡<br />

<br />

ÿ<br />

<br />

¥£ÿ<br />

¤<br />

¥<br />

¡<br />

<br />

ÿ& <br />

$<br />

¤<br />

¥<br />

<br />

<br />

<br />

ÿ& <br />

<br />

¢<br />

✎<br />

G, x<br />

☞<br />

Numer, Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NStos ← 1; Stos[NStos] ← x<br />

⎧NStos > 0<br />

v ← STos[NStos]<br />

NI v = 0<br />

$NStos ⎧ ← N Stos − 1<br />

w ← I v [1]<br />

NI v ← NI v − 1<br />

i ← 1<br />

⎪⎨<br />

¡Iv [i]<br />

⎪⎨<br />

← I v [i − 1]<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NStos ← Nstos + 1<br />

⎪⎩<br />

Stos[NStos] ← w<br />

⎪⎩ ⎪⎩<br />

← ∪ {vw}<br />

)<br />

✍<br />

ÿ ¡ <br />

£ "<br />

¤ *¢$(Numer, Drzewo,<br />

<br />

" ¡¢<br />

£ "<br />

<br />

<br />

¤ ¡NIv<br />

<br />

<br />

<br />

<br />

<br />

! <br />

# <br />

% ' <br />

( <br />

) <br />

<br />

<br />

<br />

<br />

! <br />

# <br />

% <br />

' <br />

( <br />

<br />

✌<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 3


PV<br />

M<br />

;<br />

,<br />

- , . < =<br />

1<br />

Ḣ<br />

Ḣ<br />

G , KG<br />

1<br />

2 GJ<br />

G , KG>?@?A<br />

/G<br />

Przykład . Przeszukiwanie grafu w głab<br />

˛<br />

✎<br />

+, -./<br />

01 2345<br />

46<br />

7<br />

89:<br />

G,x<br />

☞<br />

N O PQ<br />

R STUO<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NStos ← 1; Stos[NStos] ← x<br />

F20,GNStos > 0<br />

✍<br />

⎧<br />

v ← STos[NStos]<br />

NI v = 0<br />

⎪⎨<br />

⎪⎩<br />

0 I<br />

2 GJNStos ← N Stos − 1<br />

> ?@?A<br />

B C<br />

⎧<br />

w ← I v [1]<br />

NI v ← NI v − 1<br />

⎪⎨<br />

⎪⎩<br />

I ./i ← 1<br />

1 L/J(Numer,Drzewo,<br />

0 I<br />

1 .NIv<br />

D E<br />

I v [i] ← I v [i − 1]<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NStos ← Nstos + 1<br />

⎪⎩<br />

Stos[NStos] ← w<br />

> ?@?A<br />

B C<br />

B C<br />

D E← > ?@?A<br />

D E)<br />

B C<br />

D E∪ {vw}<br />

a = 1<br />

b<br />

c<br />

d e f g<br />

Numer[a] ← 1<br />

Ponumerow ← 1<br />

Stos ← [a]<br />

✌<br />

NStos ← 1<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 3


z { | }~ €<br />

y<br />

g<br />

c<br />

def<br />

X<br />

Y X Z h i<br />

]<br />

t Z<br />

s X ws<br />

]<br />

^sv<br />

s X wsjklkm<br />

[s<br />

✎<br />

WX YZ[<br />

\]^_`a `b<br />

G,x<br />

☞<br />

a<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NStos ← 1; Stos[NStos] ← x<br />

r^\XsNStos > 0<br />

⎧<br />

v ← STos[NStos]<br />

NI v = 0<br />

^svNStos ⎧ ← N Stos − 1<br />

w ← I v [1]<br />

NI v ← NI v − 1<br />

\ u<br />

j klkm<br />

n o<br />

p q<br />

b = 2<br />

a = 1<br />

c<br />

⎪⎨<br />

u Z[i ← 1 ] ZNIv<br />

⎪⎩<br />

⎪⎨<br />

⎪⎩<br />

] x[v(Numer,Drzewo,<br />

\ u<br />

t ZIv[i] ← I v [i − 1]<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NStos ← Nstos + 1<br />

⎪⎩<br />

Stos[NStos] ← w<br />

n o<br />

p q← j klkm<br />

n o<br />

p q∪ {vw}<br />

✍<br />

j klkm<br />

n o<br />

p q)<br />

d e f g<br />

v ← a<br />

w ← b<br />

Ponumerow ← 2<br />

✌<br />

Numer[b] ← 2<br />

Drzewo ← {ab}<br />

NStos ← 2<br />

Stos ← [a,b]<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 4


¬<br />

­<br />

¥ ¦ §¨© ª«<br />

¤<br />

’<br />

‘<br />

‹<br />

Ž<br />

ƒ<br />

„ ƒ … “ ”<br />

‡<br />

ˆ<br />

‡<br />

Ÿ …<br />

ž ƒ ¢ž<br />

ˆ<br />

‰ ž¡<br />

ž<br />

†ž<br />

✎<br />

‚ƒ „…†<br />

‡ˆ‰Š‹Œ<br />

G,x<br />

☞<br />

ª« ®¬©¯°<br />

± ² ³b<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NStos ← 1; Stos[NStos] ← x<br />

⎧<br />

v ← STos[NStos]<br />

NI v = 0<br />

‰‡ƒ žNStos > 0<br />

⎪⎨<br />

• –—–˜ š › œ<br />

⎧<br />

w ← I v [1]<br />

NI v ← NI v − 1<br />

…†i ← 1 ˆ…NIv<br />

‰ ž¡NStos ← N Stos − 1<br />

✍<br />

⎪⎨<br />

Ÿ …Iv[i] ← I v [i − 1]<br />

a = 1<br />

b = 2 c = 3<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NStos ← Nstos + 1<br />

⎪⎩<br />

Stos[NStos] ← w<br />

⎪⎩ ⎪⎩<br />

ˆ£†¡(Numer,Drzewo,<br />

ƒ ¢ž•–—–˜ š<br />

• –—–˜ š<br />

› œ← • –—–˜<br />

› œ)<br />

š<br />

› œ∪ {vw}<br />

d e f g<br />

v ← b<br />

w ← a<br />

w ← c<br />

✌<br />

Ponumerow ← 3<br />

Numer[c] ← 3<br />

Drzewo ← {ab,bc}<br />

NStos ← 3<br />

Stos ← [a,b,c]<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 4


ÜÝ àÞÛáâ<br />

Þ<br />

ß<br />

× Ø Ù ÚÛ ÜÝ<br />

Ö<br />

Ä<br />

µ<br />

µ·Å Æ<br />

º<br />

Ñ·<br />

Ð µ ÔÐ<br />

º<br />

» ÐÓ<br />

Ð µ ÔÐÇÈÉÈÊ<br />

¸Ð<br />

✎<br />

½¿<br />

À<br />

ÁÂÃ<br />

´µ ·¸ ¹º »¼½¾<br />

G,x<br />

☞<br />

ã ä åc<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NStos ← 1; Stos[NStos] ← x<br />

Ï»¹µÐNStos > 0<br />

⎧<br />

v ← STos[NStos]<br />

NI v = 0<br />

⎪⎨<br />

¹ Ò<br />

» ÐÓNStos ← N Stos − 1<br />

Ç ÈÉÈÊ<br />

Ë Ì<br />

⎧<br />

w ← I v [1]<br />

NI v ← NI v − 1<br />

Ò·¸i ← 1 º·NIv<br />

Í Î<br />

⎪⎩<br />

⎪⎨<br />

⎪⎩<br />

º Õ¸Ó(Numer,Drzewo,<br />

¹ Ò<br />

Ñ·Iv[i] ← I v [i − 1]<br />

a = 1<br />

b = 2 c = 3<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NStos ← Nstos + 1<br />

⎪⎩<br />

Stos[NStos] ← w<br />

Ë Ì<br />

Í Î← Ç ÈÉÈÊ<br />

Ë Ì<br />

Í Î∪ {vw}<br />

✍<br />

Ç ÈÉÈÊ<br />

Ë Ì<br />

Í Î)<br />

d e f = 4 g<br />

v ← c<br />

w ← a w ← b w ← f<br />

Ponumerow ← 4<br />

✌<br />

Numer[f] ← 3<br />

Drzewo ← {ab,bc,cf}<br />

NStos ← 4<br />

Stos ← [a,b,c,f]<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 4


¨<br />

ö<br />

ÿ<br />

ç<br />

è ç é ÷ ø<br />

ì<br />

£ é<br />

ç ¦¢ ¢<br />

ì<br />

í ¢¥<br />

ç ¦¢ùúûúü ¢<br />

✎<br />

æç èéê<br />

ëì íîïð<br />

ïñ<br />

ò<br />

óôõ<br />

G,x<br />

☞<br />

© <br />

f<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NStos ← 1; Stos[NStos] ← x<br />

¡íëç¢NStos > 0<br />

⎧<br />

v ← STos[NStos]<br />

NI v = 0<br />

⎪⎨<br />

ë ¤<br />

í ¢¥NStos ← N Stos − 1<br />

ù úûúü<br />

ý þ<br />

⎧<br />

w ← I v [1]<br />

NI v ← NI v − 1<br />

¤ éêi ← 1 ì éNIv<br />

⎪⎩<br />

⎪⎨<br />

⎪⎩<br />

ì §ê¥(Numer,Drzewo,<br />

ë ¤<br />

£ éIv[i] ← I v [i − 1]<br />

a = 1<br />

b = 2 c = 3<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NStos ← Nstos + 1<br />

⎪⎩<br />

Stos[NStos] ← w<br />

ý þ<br />

ÿ<br />

←<br />

ù úûúü<br />

ý þ<br />

ÿ<br />

∪ {vw}<br />

✍<br />

ù úûúü<br />

ý þ<br />

ÿ<br />

)<br />

d e f = 4 g = 5<br />

v ← f<br />

w ← b<br />

w ← c<br />

ê¢<br />

✌<br />

w ← g<br />

Ponumerow ← 5<br />

Numer[g] ← 5<br />

Drzewo ← {ab,bc,cf,fg}<br />

NStos ← 5<br />

Stos ← [a,b,c,f,g]<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 4


I > J<br />

BC<br />

H F =<br />

F<br />

G<br />

D BE<br />

? @A<br />

BC<br />

; <br />

:<br />

(<br />

&'<br />

! # $<br />

%<br />

+ ,-,.<br />

/0<br />

<br />

) *<br />

3<br />

<br />

5 <br />

4 84<br />

<br />

47<br />

+ ,-,.<br />

/0<br />

/0<br />

4<br />

+ ,-,.<br />

/0<br />

✎<br />

<br />

!"<br />

G,x<br />

☞<br />

K @g<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NStos ← 1; Stos[NStos] ← x<br />

⎧<br />

v ← STos[NStos]<br />

NI v = 0<br />

4NStos > 0<br />

⎪⎨<br />

6<br />

⎧<br />

w ← I v [1]<br />

NI v ← NI v − 1<br />

47NStos ← N Stos − 1<br />

6 i ← 1 NIv<br />

1 2<br />

⎪⎩<br />

⎪⎨<br />

⎪⎩<br />

97(Numer,Drzewo,<br />

6<br />

5 Iv[i] ← I v [i − 1]<br />

a = 1<br />

b = 2 c = 3<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NStos ← Nstos + 1<br />

⎪⎩<br />

Stos[NStos] ← w<br />

84+,-,.<br />

1<br />

1 2← 2)<br />

1 2∪ {vw}<br />

d e f = 4 g = 5<br />

v ← g<br />

w ← c<br />

w ← f<br />

✍<br />

4<br />

✌<br />

NStos ← 4<br />

Stos ← [a,b,c,f]<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 4


} r ~<br />

vw<br />

| z q<br />

z<br />

{<br />

x vy<br />

s tu<br />

vw<br />

o pqr<br />

n<br />

\<br />

Z[<br />

U W X<br />

Y<br />

M<br />

N M O ]^<br />

g<br />

R<br />

i O<br />

h M lh<br />

R<br />

S hk<br />

cd<br />

M lh_à`b cd<br />

h<br />

cd<br />

✎<br />

LM NOP<br />

Q RSTUV<br />

G,x<br />

☞<br />

tf<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NStos ← 1; Stos[NStos] ← x<br />

⎧<br />

v ← STos[NStos]<br />

NI v = 0<br />

SQM hNStos > 0<br />

Q j<br />

_à`b cd e f<br />

⎧<br />

w ← I v [1]<br />

NI v ← NI v − 1<br />

S hkNStos ← N Stos − 1<br />

b = 2<br />

a = 1<br />

c<br />

⎪⎨<br />

j OPi ← 1 R ONIv<br />

⎪⎩<br />

⎪⎨<br />

⎪⎩<br />

i OIv[i] ← I v [i − 1]<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NStos ← Nstos + 1<br />

⎪⎩<br />

Stos[NStos] ← w<br />

✍<br />

Q j<br />

R mPk(Numer,Drzewo, _à`b<br />

e f← _à`b<br />

e f∪ {vw}<br />

Ph<br />

e f)<br />

d e f = 4 g = 5<br />

v ← f<br />

NStos ← 3<br />

Stos ← [a,b,c]<br />

✌<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 4


± ¦ ²<br />

ª«<br />

° ® ¥<br />

®<br />

¯<br />

¬ ª­<br />

§¨© ª«<br />

£ ¤¥¦<br />

¢<br />

‰ ‹ Œ<br />

… †‡ˆ‰Š<br />

›<br />

†<br />

ƒ<br />

œ<br />

œ<br />

†<br />

‡ œŸ<br />

œ<br />

œ<br />

✎<br />

€ ‚ƒ„<br />

Ž<br />

G,x<br />

☞<br />

³¨c<br />

✍<br />

‚ ƒ ‘ ’Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NStos ← 1; Stos[NStos] ← x<br />

„œ<br />

⎧<br />

v ← STos[NStos]<br />

NI v = 0<br />

‡… œNStos > 0<br />

⎪⎨<br />

⎪⎩<br />

… ž<br />

‡ œŸNStos ← N Stos − 1<br />

“ ”•”–<br />

—˜ š<br />

⎧<br />

w ← I v [1]<br />

NI v ← NI v − 1<br />

⎪⎨<br />

⎪⎩<br />

ž ƒ„i ← 1 † ƒNIv<br />

† ¡„Ÿ(Numer,Drzewo,<br />

ƒIv[i] ← I v [i − 1]<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NStos ← Nstos + 1<br />

⎪⎩<br />

Stos[NStos] ← w<br />

… ž<br />

“ ”•”–<br />

“ ”•”–<br />

—˜<br />

<br />

š← š)<br />

—˜<br />

“ ”•”–<br />

—˜<br />

š∪ {vw}<br />

a = 1<br />

b = 2 c = 3<br />

d e f = 4 g = 5<br />

v ← c<br />

w ← g<br />

NStos ← 2<br />

✌<br />

Stos ← [a,b]<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 4


á â ã<br />

ÜÝ<br />

à Þ Û<br />

Þ<br />

ß<br />

ÜÝ<br />

Ö<br />

Ä<br />

ÂÃ<br />

½ ¿ À<br />

Á<br />

Ç ÈÉÈÊ<br />

ËÌ<br />

µ<br />

µ·<br />

Å Æ<br />

Ï<br />

º<br />

Ñ·<br />

Ð µ ÔÐ<br />

º<br />

» ÐÓ<br />

Ç ÈÉÈÊ<br />

ËÌ<br />

ËÌ<br />

Ð<br />

Ç ÈÉÈÊ<br />

ËÌ<br />

✎<br />

´µ ·¸ ¹ º»¼½¾<br />

G,x<br />

☞<br />

× Ø Ù ÚÛ<br />

ä åb<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NStos ← 1; Stos[NStos] ← x<br />

⎧<br />

v ← STos[NStos]<br />

NI v = 0<br />

»¹µ ÐNStos > 0<br />

⎪⎨<br />

¹ Ò<br />

⎧<br />

w ← I v [1]<br />

NI v ← NI v − 1<br />

Ò·¸i ← 1 º·NIv<br />

» ÐÓNStos ← N Stos − 1<br />

Í Î<br />

⎪⎩<br />

⎪⎨<br />

⎪⎩<br />

º Õ¸Ó(Numer,Drzewo,<br />

¹ Ò<br />

Ñ·Iv[i] ← I v [i − 1]<br />

a = 1<br />

b = 2 c = 3<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NStos ← Nstos + 1<br />

⎪⎩<br />

Stos[NStos] ← w<br />

µ ÔÐÇÈÉÈÊ<br />

Í<br />

Í Î← Î)<br />

Í Î∪ {vw}<br />

d = 6 e f = 4 g = 5<br />

v ← b<br />

w ← d<br />

Ponumerow ← 6<br />

✍<br />

¸Ð<br />

✌<br />

Numer[d] ← 5<br />

Drzewo ← {ab,bc,cf,fg,bd}<br />

NStos ← 3<br />

Stos ← [a,b,d]<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 4


¨<br />

©<br />

ö<br />

ôõ<br />

ï ñ ò<br />

ó<br />

ÿ<br />

ù úûúü<br />

ýþ<br />

ç<br />

è ç é ÷ ø<br />

ì<br />

£ é<br />

¢ ç ¦¢<br />

ì<br />

í ¢¥<br />

ù úûúü<br />

ýþ<br />

ýþ<br />

¢<br />

ù úûúü<br />

ýþ<br />

ê¢<br />

✎<br />

æç èéê<br />

ë ìíîïð<br />

G,x<br />

☞<br />

d<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NStos ← 1; Stos[NStos] ← x<br />

⎧<br />

v ← STos[NStos]<br />

NI v = 0<br />

¡íë ç<br />

¢NStos > 0<br />

⎪⎨<br />

ë ¤<br />

⎧<br />

w ← I v [1]<br />

NI v ← NI v − 1<br />

í ¢¥NStos ← N Stos − 1<br />

¤ éêi ← 1 ì éNIv<br />

⎪⎩<br />

⎪⎨<br />

⎪⎩<br />

ë ¤<br />

ì §ê¥(Numer,Drzewo,<br />

£ éIv[i] ← I v [i − 1]<br />

a = 1<br />

b = 2 c = 3<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NStos ← Nstos + 1<br />

⎪⎩<br />

Stos[NStos] ← w<br />

ç ¦¢ùúûúü<br />

ÿ<br />

ÿ<br />

←<br />

)<br />

ÿ<br />

∪ {vw}<br />

d = 6 e = 7 f = 4 g = 5<br />

v ← d<br />

w ← b<br />

w ← e<br />

✍<br />

✌<br />

Ponumerow ← 7<br />

Numer[e] ← 7<br />

Drzewo ← {ab,bc,cf,fg,bd,de}<br />

NStos ← 4<br />

Stos ← [a,b,d,e]<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 4


FH =GEIJ<br />

;<br />

;<br />

)<br />

%<br />

&'(<br />

!<br />

"#<br />

"$<br />

<br />

* +<br />

4<br />

6 <br />

5 95<br />

5 95,-.-/<br />

5<br />

✎<br />

<br />

<br />

G,x<br />

☞<br />

C DE F @G A<br />

< => ? @AB<br />

K L @e<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NStos ← 1; Stos[NStos] ← x<br />

⎧<br />

v ← STos[NStos]<br />

NI v = 0<br />

5NStos > 0<br />

⎪⎨<br />

7<br />

58NStos ← N Stos − 1<br />

, -.-/<br />

0 1<br />

⎧<br />

w ← I v [1]<br />

NI v ← NI v − 1<br />

7 i ← 1 NIv<br />

2 3<br />

⎪⎩<br />

⎪⎨<br />

⎪⎩<br />

7<br />

6 Iv[i] ← I v [i − 1]<br />

a = 1<br />

b = 2 c = 3<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NStos ← Nstos + 1<br />

⎪⎩<br />

Stos[NStos] ← w<br />

58<br />

:8(Numer,Drzewo,<br />

0 1<br />

2 3← , -.-/<br />

0 1<br />

2 3∪ {vw}<br />

✍<br />

, -.-/<br />

0 1<br />

2 3)<br />

d = 6 e = 7 f = 4 g = 5<br />

v ← e<br />

w ← b<br />

w ← d<br />

✌<br />

NStos ← 3<br />

Stos ← [a,b,d]<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 4


{} r|z~<br />

o<br />

p<br />

]<br />

N<br />

O N P^_<br />

S<br />

j P<br />

i N mi<br />

S<br />

T il<br />

i N mìabac<br />

Qi<br />

✎<br />

VX<br />

Y<br />

Z[\<br />

MN OPQ<br />

RS TUVW<br />

G,x<br />

☞<br />

q rs t uvw<br />

x yz { u| v<br />

€ud<br />

àbacNumer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NStos ← 1; Stos[NStos] ← x<br />

hTRNiNStos > 0<br />

⎧<br />

v ← STos[NStos]<br />

NI v = 0<br />

⎪⎨<br />

R k<br />

⎧<br />

w ← I v [1]<br />

NI v ← NI v − 1<br />

T ilNStos ← N Stos − 1<br />

k PQi ← 1 S PNIv<br />

d e f g<br />

⎪⎩<br />

⎪⎨<br />

⎪⎩<br />

j PIv[i] ← I v [i − 1]<br />

a = 1<br />

b = 2 c = 3<br />

✍<br />

R k<br />

S nQl(Numer,Drzewo, àbac<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NStos ← Nstos + 1<br />

⎪⎩<br />

Stos[NStos] ← w<br />

d e<br />

f g← àbac<br />

d e<br />

f g)<br />

d e<br />

f g∪ {vw}<br />

d = 6 e = 7 f = 4 g = 5<br />

v ← d<br />

NStos ← 2<br />

Stos ← [a,b]<br />

✌<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 5


°² §±¯³´ µ<br />

¤<br />

¥<br />

’<br />

‘<br />

‹<br />

Ž<br />

ƒ<br />

„ ƒ … “ ”<br />

‡<br />

ˆ<br />

‡<br />

Ÿ …<br />

ž ƒ ¢ž<br />

ˆ<br />

‰ ž¡<br />

ž<br />

†ž<br />

✎<br />

‚ƒ „…†<br />

‡ˆ‰Š‹Œ<br />

G,x<br />

☞<br />

¦ §¨ © ª«¬<br />

ªb<br />

­ ®¯ ° ª± «<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NStos ← 1; Stos[NStos] ← x<br />

⎧<br />

v ← STos[NStos]<br />

NI v = 0<br />

‰‡ƒ žNStos > 0<br />

⎪⎨<br />

• –—–˜ š › œ<br />

⎧<br />

w ← I v [1]<br />

NI v ← NI v − 1<br />

…†i ← 1 ˆ…NIv<br />

‰ ž¡NStos ← N Stos − 1<br />

✍<br />

⎪⎨<br />

Ÿ …Iv[i] ← I v [i − 1]<br />

a = 1<br />

b = 2 c = 3<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NStos ← Nstos + 1<br />

⎪⎩<br />

Stos[NStos] ← w<br />

⎪⎩ ⎪⎩<br />

ˆ£†¡(Numer,Drzewo,<br />

ƒ ¢ž•–—–˜ š<br />

• –—–˜ š<br />

› œ← • –—–˜<br />

› œ)<br />

š<br />

› œ∪ {vw}<br />

d = 6 e = 7 f = 4 g = 5<br />

v ← b<br />

w ← f<br />

NStos ← 1<br />

✌<br />

Stos ← [a]<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 5


åç Üæäèé<br />

Ù<br />

Ú<br />

Ç<br />

¸<br />

¹ ¸ºÈ É<br />

½<br />

Ô º<br />

Ó ¸×Ó<br />

½<br />

¾ ÓÖ<br />

Ó ¸×ÓÊËÌËÍ<br />

»Ó<br />

✎<br />

ÀÂ<br />

Ã<br />

ÄÅÆ<br />

·¸¹º»<br />

¼½ ¾¿ÀÁ<br />

G,x<br />

☞<br />

â ãä å ßæ à<br />

Û ÜÝ Þ ßàá<br />

ê ë ßa<br />

Numer,Drzewo,<br />

Numer[x] ← Ponumerow ← 1<br />

NStos ← 1; Stos[NStos] ← x<br />

Ò¾¼¸ÓNStos > 0<br />

⎧<br />

v ← STos[NStos]<br />

NI v = 0<br />

⎪⎨<br />

¼ Õ<br />

¾ ÓÖNStos ← N Stos − 1<br />

Ê ËÌËÍ<br />

Î Ï<br />

⎧<br />

w ← I v [1]<br />

NI v ← NI v − 1<br />

Õ º»i ← 1 ½ ºNIv<br />

Ð Ñ<br />

⎪⎩<br />

⎪⎨<br />

⎪⎩<br />

½ Ø»Ö(Numer,Drzewo,<br />

¼ Õ<br />

Ô ºIv[i] ← I v [i − 1]<br />

a = 1<br />

b = 2 c = 3<br />

Numer[w] ⎧ = 0<br />

Ponumerow ← Ponumerow + 1<br />

⎪⎨ Numer[w] ← Ponumerow<br />

Drzewo ← Drzewo ∪ {vw}<br />

NStos ← Nstos + 1<br />

⎪⎩<br />

Stos[NStos] ← w<br />

Î Ï<br />

Ð Ñ← Ê ËÌËÍ<br />

Î Ï<br />

Ð Ñ∪ {vw}<br />

✍<br />

Ê ËÌËÍ<br />

Î Ï<br />

Ð Ñ)<br />

d = 6 e = 7 f = 4 g = 5<br />

v ← a<br />

w ← c<br />

NStos ← 0<br />

✌<br />

Stos ← [ ]<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 5


Własności DFS<br />

las przeszukiwań w głab ˛ (drzewo gdy graf jest spójny)<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 5


Własności DFS<br />

las przeszukiwań w głab ˛ (drzewo gdy graf jest spójny)<br />

wierzchołek odwiedzony - odwiedzony po raz pierwszy<br />

podczas przeszukiwania<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 5


Własności DFS<br />

las przeszukiwań w głab ˛ (drzewo gdy graf jest spójny)<br />

wierzchołek odwiedzony - odwiedzony po raz pierwszy<br />

podczas przeszukiwania<br />

wierzchołek przetworzony - lista sasiedztwa ˛ została<br />

całkowicie zbadana<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 5


Własności DFS<br />

las przeszukiwań w głab ˛ (drzewo gdy graf jest spójny)<br />

wierzchołek odwiedzony - odwiedzony po raz pierwszy<br />

podczas przeszukiwania<br />

wierzchołek przetworzony - lista sasiedztwa ˛ została<br />

całkowicie zbadana<br />

etykiety czasowe : każdemu wierzchołki<br />

przyporzadkowujemy ˛<br />

dwie liczby całkowite z przedziału<br />

1,...2|V |<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 5


Własności DFS<br />

las przeszukiwań w głab ˛ (drzewo gdy graf jest spójny)<br />

wierzchołek odwiedzony - odwiedzony po raz pierwszy<br />

podczas przeszukiwania<br />

wierzchołek przetworzony - lista sasiedztwa ˛ została<br />

całkowicie zbadana<br />

etykiety czasowe : każdemu wierzchołki<br />

przyporzadkowujemy ˛<br />

dwie liczby całkowite z przedziału<br />

1,...2|V |<br />

czas odwiedzin<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 5


Własności DFS<br />

las przeszukiwań w głab ˛ (drzewo gdy graf jest spójny)<br />

wierzchołek odwiedzony - odwiedzony po raz pierwszy<br />

podczas przeszukiwania<br />

wierzchołek przetworzony - lista sasiedztwa ˛ została<br />

całkowicie zbadana<br />

etykiety czasowe : każdemu wierzchołki<br />

przyporzadkowujemy ˛<br />

dwie liczby całkowite z przedziału<br />

1,...2|V |<br />

czas odwiedzin<br />

czas przetworzenia<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 5


<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 5


1/<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 5


1/<br />

2/<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 5


1/<br />

2/ 3/<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 5


1/<br />

2/ 3/<br />

4/<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 5


1/<br />

2/ 3/<br />

4/<br />

5/<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 5


1/<br />

2/ 3/<br />

4/<br />

5/<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 6


1/<br />

2/ 3/<br />

4/<br />

5/6<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 6


1/<br />

2/ 3/<br />

4/<br />

5/6<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 6


1/<br />

2/ 3/<br />

4/ 7<br />

5/6<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 6


1/<br />

2/ 3/<br />

4/ 7<br />

5/6<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 6


1/<br />

2/ 3/ 8<br />

4/ 7<br />

5/6<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 6


1/<br />

2/ 3/ 8<br />

9/<br />

4/ 7<br />

5/6<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 6


1/<br />

2/ 3/ 8<br />

9/<br />

10/<br />

4/ 7<br />

5/6<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 6


1/<br />

2/ 3/ 8<br />

9/<br />

10/<br />

4/ 7<br />

5/6<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 6


1/<br />

2/ 3/ 8<br />

9/<br />

10/11<br />

4/ 7<br />

5/6<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 6


1/<br />

2/ 3/ 8<br />

9/ 12<br />

10/11<br />

4/ 7<br />

5/6<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 7


1/<br />

2/ 13<br />

3/ 8<br />

9/ 12<br />

10/11<br />

4/ 7<br />

5/6<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 7


1/ 14<br />

2/ 13<br />

3/ 8<br />

9/ 12<br />

10/11<br />

4/ 7<br />

5/6<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 7


<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 7


1/<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 7


1/<br />

2/<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 7


1/<br />

2/<br />

3/<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 7


1/<br />

2/<br />

3/ 4/<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 7


1/<br />

2/<br />

3/ 4/<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 7


1/<br />

2/<br />

3/ 4/5<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 7


1/<br />

2/<br />

3/ 6<br />

4/5<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 8


1/<br />

2/ 7<br />

3/ 6<br />

4/5<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 8


1/<br />

2/ 7 8/<br />

3/ 6<br />

4/5<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 8


1/<br />

2/ 7 8/<br />

3/ 6<br />

4/5<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 8


1/<br />

2/ 7 8/9<br />

3/ 6<br />

4/5<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 8


1/ 10<br />

2/ 7 8/9<br />

3/ 6<br />

4/5<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 8


1/ 10<br />

2/ 7 8/9<br />

3/ 6<br />

4/5<br />

11/<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 8


1/ 10<br />

2/ 7 8/9<br />

3/ 6<br />

4/5<br />

11/ 12/<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 8


1/ 10<br />

2/ 7 8/9<br />

3/ 6<br />

4/5<br />

11/ 12/<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 8


1/ 10<br />

2/ 7 8/9<br />

3/ 6<br />

4/5<br />

11/ 12/13<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 8


1/ 10<br />

2/ 7 8/9<br />

3/ 6<br />

4/5<br />

11/ 12/13<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 9


1/ 10<br />

2/ 7 8/9<br />

3/ 6<br />

4/5<br />

11/14<br />

12/13<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 9


ý<br />

ûü<br />

ú<br />

÷ ø<br />

ù<br />

õ ö<br />

õ ö<br />

ñ òóô ð<br />

ìíî<br />

ï<br />

¤¥<br />

¦§<br />

í<br />

¡<br />

¢<br />

¡£<br />

î<br />

í ï<br />

ó<br />

ò<br />

ó ©<br />

ù<br />

ú<br />

û<br />

© í ©<br />

¤¥<br />

¦§<br />

¡<br />

¢<br />

¡£<br />

¤¥ ¦§<br />

ò<br />

ó © ¡ ¢¡£<br />

¤¥<br />

¦§<br />

¡<br />

¢<br />

¡£<br />

ð<br />

©<br />

Algorytm DFS w wersji rekurencyjnej<br />

✎<br />

G, x<br />

☞<br />

Numer, Drzewo,<br />

v ← x<br />

Numer[v] ← Ponumerowano ← 1<br />

w ∈ Γ(v)<br />

Numer[w] ⎧ = 0<br />

Ponumerowano ← Ponumerowano + 1<br />

⎪⎨<br />

Numer[w] ← Ponumerowano<br />

Drzewo ← Drzewo ∪ {vw}<br />

⎪⎩<br />

(G, w)<br />

Numer(w) < Numer(v)<br />

← ∪ {vw}<br />

)<br />

✍<br />

¨ïð©ÿ<br />

ï ñ¨<br />

þ ÿ<br />

ñ¨<br />

ò ð(Numer, Drzewo,<br />

✌<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 9


1<br />

/ " 0<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

2 345<br />

;< =><br />

<br />

@<br />

A<br />

B<br />

<br />

3?<br />

Przykładem zastosowania procedury DFS jest algorytm<br />

NUMEROWANIEWSZYSTKICHWIERZCHOŁKÓW, który<br />

wykorzystuje procedurę DFS do ponumerowania<br />

wszystkich wierzchołków grafu G.<br />

✎<br />

! "#$% & '()'*+%,- & % ( ,-!.+<br />

G<br />

☞<br />

v ∈ V<br />

6 Numer[v] ← 0<br />

Drzewo ← ← ∅<br />

v ∈ V<br />

Numer[v] = 0<br />

✍<br />

2 345<br />

6 2<br />

7 898:<br />

(G, v)<br />

✌<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 9


Uwagi końcowe:<br />

złożoność DFS (i wielu algorytmów wykorzystujacych<br />

˛<br />

DFS) jest rzędu O(|V | + |E|)<br />

dodatkowe informacje na temat poprawności obu<br />

algorytmów przeszukiwania grafow oraz ich zastosowań<br />

sa˛<br />

zawarte Rozdziale 23 ksiażki ˛ Cormena, Leisersona i<br />

Rivesta (patrz literatura pomocnicza wykładu)<br />

<strong>Algorytmy</strong> <strong>grafowe</strong> (<strong>AGR</strong> <strong>320</strong>) – p. 9

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!