• Graf (nieskierowany) G = (V, E) struktura skªadaj¡ca si¦ ze:
zbioru wierzchoªków V = {v1, v2, . . . , vn} oraz
zbioru kraw¦dzi E = {e1, e2, . . . , em}.
Z ka»d¡ kraw¦dzi¡ e skojarzona jest para wierzchoªków incydentnych (u, v). Analiz¦ algorytmów grafowych mo»emy ograniczy¢ do przypad- ków, w których para wierzchoªków jednoznacznie identykuje kraw¦d¹.
• Graf skierowany dla ka»dej kraw¦dzi (oznaczanej tutaj jako ªuk) para wierzchoªków incydentnych jest par¡ uporz¡dkowan¡ {u, v}.
Zatem w grae skierowanym {u, v} 6= {v, u} ({u, v} i {v, u} oznacza dwa ró»ne ªuki, podczas gdy w grae nieskierowanym (u, v) i (v, u) to ta sama kraw¦d¹, tzn. (u, v) = (v, u)).
• Rozmiar grafu b¦dziemy identykowa¢ przez liczb¦ wierzchoªków n oraz liczb¦ kraw¦dzi (ªuków) m.
v1
v4 v3
v2
v6
3
8 9
4
8
4 5
v1
5
v4 v3
v2
v6
3 9
4 – 8
5 4 3
3 5
(ªuku {i, j}).
Je±li dany graf nie zawiera kraw¦dzi (i, j) to w odpowiadaj¡cej jej komórce macierzy wpisujemy warto±¢ ∞. Warto±ci wyró»nione (zera, warto±ci uje- mne, niesko«czono±ci, znaki nienumeryczne) znajduj¡ si¦ te» na przek¡tnej macierzy (brak kraw¦dzi typu (i, i)).
Zauwa»my równie», »e macierz dla grafu nieskierowanego jest zawsze syme- tryczna (w takim wypadku mo»na równie» przechowywa¢ tylko poªow¦ ma- cierzy).
Zaj¦to±¢ pami¦ci O(n2).
Zaj¦to±¢ pami¦ci O(m).
[1] [2] [3] [4] [5] [6]
[1] – 5 3 4 8 9
[2] 5 – ∞ 4 ∞ 8
[3] 3 ∞ – ∞ 5 ∞
[4] 4 4 ∞ – ∞ ∞
[5] 8 ∞ 5 ∞ – ∞
[6] 9 8 ∞ ∞ ∞ –
(1) [1] [2] 5
(2) [1] [3] 3
(3) [1] [4] 4
(4) [1] [5] 8
(5) [1] [6] 9
(6) [2] [4] 4
(7) [2] [6] 8
(8) [3] [5] 5
st¦puje w tej strukturze 2 razy w li±cie i-tej oraz j-tej.
Zalet¡ struktury jest to, »e wszystkie kraw¦dzie (ªuki) z danego wierzchoªka mamy zgrupowane w jednym miejscu (s¡ dost¦pne bez konieczno±ci prze- szukiwania caªego grafu).
Zaj¦to±¢ pami¦ci O(n + m).
wych i wagi wszystkich kraw¦dzi, pogrupowane w zbiory ze sob¡ incydentne, a pierwsza tablica (odpowiadaj¡ca wierzchoªkom pocz¡tkowym) zawiera wska¹niki rozdzielaj¡ce poszczególne grupy (np. je±li wierzchoªek 1 ma 5 kraw¦dzi incydentnych, to komórki [1] i [2] pierwszej tablicy zawieraj¡
odpowiednio wska¹niki na komórki [1] i [6] tablicy drugiej).
Struktura posiada zalet¦ struktury wcze±niejszej zgrupowanie kraw¦dzi incydentnych poszczególnych wierzchoªków, przy braku typów wska¹niko- wych.
Zaj¦to±¢ pami¦ci O(n + m).
[1]
[2]
[3]
[4]
[5]
[6]
[2] 5
Połączone listy sąsiadów
[3] 3 [4] 4 [6] 9
[1] 3 [6] -8
[1] 3 [2] 4
[1] 1
[2] 5
[3] 7
[4] 8
[5] -1
[6] -1
B W
[2] 5 (1)
[3] 3 (2)
[4] 4 (3)
[6] 9 (4)
[1] 3 (5)
[6] -8 (6)
[1] 3 (7)
[2] 4 (8)
biega, tj. {v1, v2, . . . , vk−1, vk}.
Wag¡ drogi b¦dziemy okre±la¢ sum¦ wag ªuków j¡ tworz¡cych.
Cykl droga zamkni¦ta, tzn. taka, »e v1 = vk. Graf acykliczny graf nie zawieraj¡cy cykli.
Zauwa»my, »e z wierzchoªka s do t mo»e istnie¢ wiele ró»nych dróg, zatem najkrótsz¡ drog¡ b¦dzie ta spo±ród dróg, która ma najmniejsz¡ wag¦.
Podgraf G0 = (V 0, E0) grafu G = (V, E) to graf o rozmiarze n0 ≤ n i m0 ≤ m, dla którego V 0 ⊆ V oraz E0 ⊆ E (tzn. wszystkie wierzchoªki i ªuki G0 nale»¡
do G).
grae spójnym (nieskierowanym), istnieje droga mi¦dzy ka»d¡ par¡ wierz- choªków. Zatem doª¡czenie nowej kraw¦dzi spowoduje powstanie cyklu, a usuni¦cie jakiejkolwiek kraw¦dzi z drzewa spowoduje jego rozspójnienie.
Wreszcie, w drzewie m = n − 1.
Drzewo rozpinaj¡ce (spinaj¡ce) T = (V T, ET) podgraf (nieskierowa- nego, spójnego) grafu G = (V, E), który jest spójny i V T = V . Graf spójny mo»e zawiera¢ wiele (do nn−2) ró»nych drzew rozpinaj¡cych, z których to o najmniejszej wadze nazywamy Minimalnym Drzewem Rozpinaj¡cym (Spinaj¡cym) MST (ang. Minimum Spanning Tree).
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
v1
v4 v3
v2
v6
3
8
6
4
8
4 5
5 Waga D1: 5+3+5+8 = 21
v1
v4 v3
v2
v6
3
8
6
4
8
4 5
5 Waga D1: 5+3+5+8 = 21
Droga D2 {v5,v1,v4,v6}
Waga D2: 8+4+6 = 18
v1
v4 v3
v2
v6
3
8
6
4
8
4 5
5
Waga MST1: 3+8+4+4+6 = 25
v1
v4 v3
v2
v6
3
8
6
4
8
4 5
5
Waga MST1: 3+8+4+4+6 = 25
Drzewo MST2
Waga MST2: 5+3+5+8+6 = 27
polega na doª¡czaniu kolejno kraw¦dzi w porz¡dku ich niemalej¡cych wag, o ile doª¡czana kraw¦d¹ nie utworzy cyklu z ju» wybranymi kraw¦dziami.
Aby wyznaczy¢ zªo»ono±¢ obliczeniow¡ algorytmu, musimy znale¹¢ efek- tywn¡ metod¦ sprawdzania, czy doª¡czana kraw¦d¹ utworzy cykl z ju»
doª¡czonymi.
Zatem powy»sz¡ procedur¦ mo»emy skonstruowa¢ w ten sposób, »e two- rzymy tablic¦ C o rozmiarze n i przy jej pomocy kolorujemy wierzchoªki.
Na pocz¡tku ka»dej komórce przypisujemy inn¡ warto±¢ (reprezentuj¡c¡ ko- lor danego wierzchoªka), np. C[i] = i dla i = 1, 2, . . . , n.
W trakcie dziaªania procedury, wierzchoªki nale»¡ce do tego samego pod- drzewa b¦d¡ posiada¢ ten sam kolor.
Zatem na pocz¡tku ka»dy wierzchoªek nale»y do innego poddrzewa, a na ko«cu wszystkie wierzchoªki musz¡ nale»e¢ do tego samego poddrzewa.
Zatem ka»dy z nich ma inny kolor (taki, którego nie posiada »aden inny wierzchoªek).
Wtedy wierzchoªkowi u nadajemy kolor wierzch. v (C[u] = C[v]) lub odwrotnie (C[v] = C[u]) oba wierzchoªki otrzymuj¡ ten sam kolor, a wi¦c nale»¡ od teraz do tego samego (nowego) poddrzewa. Taka operacja oczywi±cie nie utworzy cyklu, a wi¦c jest dopuszczalna.
2. Jeden wierzch., np. u, byª ju» wcze±niej wybrany, a drugi, v, jeszcze nie.
Zatem doª¡czenie kraw¦dzi (u, v) nie spowoduje powstania cyklu.
Wtedy wierzchoªek jeszcze nie wybrany musimy doª¡czy¢ do poddrzewa, do którego nale»y wierzchoªek u (tzn. wierzchoªkowi v przypisujemy ko- lor wierzchoªka u: C[v] = C[u]).
kie wierzchoªki jednego poddrzewa musz¡ przyj¡¢ kolor drugiego, np.
C[i] = C[v] je±li C[i] == C[u].
4. Oba wierzchoªki ju» wcze±niej zostaªy wybrane i nale»¡ do tego samego poddrzewa (posiadaj¡ ten sam kolor).
Wtedy próbujemy doª¡czy¢ now¡ kraw¦d¹ do istniej¡cego drzewa, co jak ju» wiadomo zawsze spowoduje powstanie cyklu. Zatem taka operacja jest zabroniona.
Podsumowuj¡c powy»sze, doª¡czenie kraw¦dzi (u, v) jest zabronione (powstanie cykl) je±li C[u] == C[v] (przypadek 4). W przeciwnym wy- padku nale»y doª¡czy¢ kraw¦d¹ i wykona¢ operacje na tablicy C opisane odpowiednio w punktach 1, 2 lub 3.
doª¡czenie pojedynczej kraw¦dzi do ju» doª¡czonych spowoduje powstanie cyklu zajmie O(n) czasu.
Teraz mo»emy wróci¢ do wyznaczenia zªo»ono±ci caªego algorytmu Kru- skala. Zale»y ona od kilku czynników.
Je±li do przechowywania grafu wykorzystamy list¦ kraw¦dzi i przed roz- pocz¦ciem doª¡czania kraw¦dzi posortujemy t¡ struktur¦ niemalej¡co ze wzgl¦du na wagi (co zajmie O(m log m) czasu) to b¦dziemy mogli nast¦p- nie analizowa¢ kraw¦dzie po kolei, za ka»dym razem stosuj¡c procedur¦
sprawdzania cyklu.
Zauwa»my jednak, »e w przypadku grafów g¦stych (m >> n) tylko niewielka cz¦±¢ wszystkich kraw¦dzi b¦dzie analizowana. Wtedy sortowanie wszyst- kich b¦dzie niepotrzebne zbyt rozrzutne.
Lepiej wtedy umie±ci¢ kraw¦dzie w kopcu i pobiera¢ za ka»dym razem najkrótsz¡ z jeszcze nie doª¡czonych z korzenia.
Wtedy takie pobranie b¦dzie zajmowa¢ O(log m), a takich pobra« b¦dzie p, zatem zªo»ono±¢ caªego algorytmu wyniesie
O(p(log m + m)) = O(pm), gdzie n ≤ p ≤ m.
Mo»liwe jest te» takie zaimplementowanie algorytmu Kruskala, »e jego zªo-
»ono±¢ wyniesie O(m log m).
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
1. (v1,v3) – 3
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
1. (v1,v3) – 3 2. (v2,v4) – 4
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
1. (v1,v3) – 3 2. (v2,v4) – 4 3. (v1,v4) – 4
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
1. (v1,v3) – 3 2. (v2,v4) – 4 3. (v1,v4) – 4 4. (v1,v2) – cykl
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
1. (v1,v3) – 3 2. (v2,v4) – 4 3. (v1,v4) – 4 4. (v1,v2) – cykl
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
1. (v1,v3) – 3 2. (v2,v4) – 4 3. (v1,v4) – 4 4. (v1,v2) – cykl 5. (v3,v5) – 5
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
1. (v1,v3) – 3 2. (v2,v4) – 4 3. (v1,v4) – 4 4. (v1,v2) – cykl 5. (v3,v5) – 5 6. (v2,v6) – 8
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
1. (v1,v3) – 3 2. (v2,v4) – 4 3. (v1,v4) – 4 4. (v1,v2) – cykl 5. (v3,v5) – 5 6. (v2,v6) – 8 waga MST: 24
Dzi¦ki temu, »e w ka»dym kroku algorytmu doª¡czamy nowy wierzchoªek do istniej¡cego poddrzewa, nigdy nie spowoduje to powstania cyklu, a wszystkich iteracji b¦dzie n − 1.
Intuicyjnie, najkorzystniej jest zastosowa¢ do tego algorytmu struktury po- zwalaj¡ce na efektywne wyszukiwanie wierzchoªków incydentnych w danym, a wi¦c np. poª¡czone listy s¡siadów.
Znalezienie kolejnego wierzchoªka do doª¡czenia b¦dzie w takim wy- padku wymagaªo przejrzenia list struktury odpowiadaj¡cych wierzchoªkom ju» doª¡czonym i wybraniu kraw¦dzi o najmniejszej wadze. W najgorszym wypadku b¦dzie wi¦c musieli przejrze¢ wszystkie kraw¦dzie, a wi¦c poje- dyncza iteracja zajmie O(m) czasu.
Zatem zªo»ono±¢ caªego algorytmu Prima to O(nm).
Kolejk¦ t¡ mo»na zaimplementowa¢ jako kopiec, w którym warto±ci¡ w¦- zªa jest odªegªo±¢ danego wierzchoªka od najbli»szego wierzchoªka spo±ród ju» doª¡czonych. Warto±ci te nale»y aktualizowa¢ po ka»dym doª¡czeniu nowego wierzchoªka, ale za to mamy od razu dost¦pn¡ informacj¦, który wierzchoªek ma by¢ doª¡czony jako nast¦pny. Takie podej±cie umo»liwia uzyskanie zªo»ono±ci obliczeniowej algorytmu Prima O(m log n).
Z kolei, je±li zamiast zwykªego kopca, u»yjemy kopca Fibonacciego, uzy- skamy zªo»ono±¢ O(m + n log n).
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
1. (v6,v2) – 8
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
1. (v6,v2) – 8
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
1. (v6,v2) – 8 2. (v2,v4) – 4
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
1. (v6,v2) – 8 2. (v2,v4) – 4
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
1. (v6,v2) – 8 2. (v2,v4) – 4 3. (v1,v4) – 4
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
1. (v6,v2) – 8 2. (v2,v4) – 4 3. (v1,v4) – 4
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
1. (v6,v2) – 8 2. (v2,v4) – 4 3. (v1,v4) – 4 4. (v1,v3) – 3
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
1. (v6,v2) – 8 2. (v2,v4) – 4 3. (v1,v4) – 4 4. (v1,v3) – 3
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
1. (v6,v2) – 8 2. (v2,v4) – 4 3. (v1,v4) – 4 4. (v1,v3) – 3 5. (v3,v5) – 5
v1
v4 v3
v2
v6
3
8
9
4
8
4 5
5
1. (v6,v2) – 8 2. (v2,v4) – 4 3. (v1,v4) – 4 4. (v1,v3) – 3 5. (v3,v5) – 5 waga MST: 24
sªu»y do wyznaczania najkrótszych dróg z wyznaczonego w¦zªa (¹ródªa, s) do wszystkich pozostaªych w¦zªów, w przypadku gdy wagi wszystkich ªu- ków grafu s¡ nieujemne.
W trakcie dziaªania algorytmu, dla ka»dego w¦zªa, x, pami¦tane jest osza- cowanie wagi najkrótszej drogi ze ¹ródªa: dsx. Przed rozpocz¦ciem dzia- ªania algorytmu warto±ci te wynosz¡ ∞ dla wszystkich w¦zªów z wyj¡tkiem
¹ródªa, dla którego dss = 0.
x∗, tzn. je±li aktualne oszacowanie, dsy, badanego w¦zªa y, jest wi¦ksze ni»
suma oszacowania dsx∗ oraz wagi, wx∗y, ªuku {x∗, y} to dsy = dsx∗ + wx∗y.
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 ∞ ∞ ∞ ∞ ∞
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 ∞ ∞ ∞ ∞ ∞
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 ∞ ∞ ∞ ∞ ∞
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 ∞ ∞ ∞ ∞
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 ∞ ∞ ∞ ∞
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 ∞ ∞ ∞
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 ∞ ∞ ∞
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 ∞ ∞
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 ∞ ∞
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 ∞
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 ∞
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 8 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 8 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 8 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 8 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 8 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
3 0 5 3 4 7 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
3 0 5 3 4 7 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
3 0 5 3 4 7 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
3 0 5 3 4 7 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
3 0 5 3 4 7 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
3 0 5 3 4 7 12
4 0 5 3 4 7 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
3 0 5 3 4 7 12
4 0 5 3 4 7 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
3 0 5 3 4 7 12
4 0 5 3 4 7 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
3 0 5 3 4 7 12
4 0 5 3 4 7 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
3 0 5 3 4 7 12
4 0 5 3 4 7 12
5 0 5 3 4 7 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
3 0 5 3 4 7 12
4 0 5 3 4 7 12
5 0 5 3 4 7 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
3 0 5 3 4 7 12
4 0 5 3 4 7 12
5 0 5 3 4 7 12
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
3 0 5 3 4 7 12
4 0 5 3 4 7 12
5 0 5 3 4 7 9
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
3 0 5 3 4 7 12
4 0 5 3 4 7 12
5 0 5 3 4 7 9
6 0 5 3 4 7 9
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
3 0 5 3 4 7 12
4 0 5 3 4 7 12
5 0 5 3 4 7 9
6 0 5 3 4 7 9
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
3 0 5 3 4 7 12
4 0 5 3 4 7 12
5 0 5 3 4 7 9
6 0 5 3 4 7 9
Najkrótsza droga z v1 do v6: { v6}
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
3 0 5 3 4 7 12
4 0 5 3 4 7 12
5 0 5 3 4 7 9
6 0 5 3 4 7 9
Najkrótsza droga z v1 do v6: { v5,v6}
v1
v4 v3
v2
v6
3 12
4 7
5 4 3
3
8
4 2
1 0 5 3 4 8 12
2 0 5 3 4 7 12
3 0 5 3 4 7 12
4 0 5 3 4 7 12
5 0 5 3 4 7 9
6 0 5 3 4 7 9
Najkrótsza droga z v1 do v6: { v5,v6}