27.07.2014 Views

Algorytmy grafowe (AGR 320)

Algorytmy grafowe (AGR 320)

Algorytmy grafowe (AGR 320)

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<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!