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