165 1) Grafy eulerowskie własnoci algorytmy 2) Problem chiskiego listonosza
166 Grafy eulerowskie Def. Graf (multigraf, niekoniecznie spójny) jest grafem eulerowskim, jeli zawiera cykl zawierajcy wszystkie krawdzie. Graf jest półeulerowski, gdy posiada łacuch o powyszej własnoci. Przykład Poniej podano reprezentacje trzech grafów, z których pierwszy jest eulerowski, drugi półeulerowski, natomiast ostatni nie jest ani eulerowski ani półeulerowski.
167 Grafy eulerowskie Nazwa eulerowski pochodzi std, i Euler w 176 r. rozwizał problem mostów królewieckich. Pytano, czy mona przej dokładnie raz przez kady z siedmiu mostów (rys. po lewej) tak, aby powróci do punktu wyjcia. Zauwamy, e problem jest równowany stwierdzeniu, czy graf pokazany na rys. po prawej stronie jest eulerowski. a a b d b d c c
168 Grafy eulerowskie Aby poda warunek konieczny i dostateczny na to, aby dany graf był eulerowski bdzie potrzebny poniszy lemat: Lemat Jeli kady wierzchołek multigrafu G ma stopie równy co najmniej 2, to G zawiera cykl. Dowód: Jeli G zawiera ptle lub krawdzie wielokrotne, to lemat jest spełniony, wic zakładamy dalej, e G jest grafem prostym. Nastpnie konstruujemy ciek: wybieramy dowolny wierzchołek v 1 V(G), po czym dodajemy kolejne według zasady: jeli v i jest ostatnio dodanym wierzchołkiem, to jeli v i jest ssiedni z v j poprzednio dodanym do cieki, to otrzymujemy cykl zawierajcy v j,...,v i co koczy dowód. W przeciwnym wypadku wybieramy dowolnego ssiada wierzchołka v i (istnieje, poniewa deg(v i )>1) i dodajemy go do cieki. Graf G jest skoczony wic w pewnym kroku otrzymamy wierzchołek v k, który jest ssiedni z pewnym v l, gdzie l<k.
169 Tw. Eulera Tw. (Euler, 176) Multigraf spójny jest eulerowski wtedy i tylko wtedy, gdy stopie kadego wierzchołka jest liczb parzyst. Dowód: () Jeli C jest cyklem Eulera w G, to trawersujemy i usuwamy krawdzie w E(G) zgodnie z kolejnoci zadan przez C. Gdy przechodzimy przez dowolny wierzchołek v, to usuwamy dwie incydentne z nim krawdzie, wic stopie tego wierzchołka w tak zredukowanym grafie pozostaje parzysty. Na rys. poniej kolorem czerwonym oznaczono krawdzie, które zostały usunite z G. 2l v 2k 2l v 2k 2 2 (przed przejciem przez v) (po przejciu przez v)
170 Tw. Eulera Dowód tw. Eulera ( ) G jest spójny, wic dla kadego v zachodzi deg(v)>1 wic z poprzedniego lematu wiadomo, e G zawiera cykl, który oznaczmy przez C. Twierdzenie dowodzimy przez indukcj wzgldem m. Jeli C = G, to dowód jest zakoczony. W przeciwnym wypadku kada składowa spójnoci grafu G E(C) spełnia załoenie twierdzenia, wic z załoenia indukcyjnego jest eulerowska. Znajdujemy cykl Eulera w G nastpujco: przechodzimy przez kolejne wierzchołki w C i jeli biecy wierzchołek naley do pewnej składowej spójnoci, to trawersujemy cykl Eulera w tej składowej, powracajc do tego samego wierzchołka w C. C Składowe spójnoci grafu G E(C)
171 Algorytm Fleury ego Wniosek Multigraf spójny jest eulerowski wtedy i tylko wtedy, gdy zbiór jego krawdzi mona podzieli na rozłczne cykle. Wniosek Multigraf spójny jest półeulerowski, gdy posiada co najwyej dwa wierzchołki nieparzystego stopnia. Jeden z nich jest pocztkiem, a drugi kocem łacucha Eulera. Algorytm Fleury ego (znajdujcy cykl Eulera) rozpocznij wdrówk w dowolnym wierzchołku usuwaj strawersowane krawdzie, przechodzc po mocie jedynie w ostatecznoci (sytuacja, w której s do wyboru co najmniej dwa mosty oznacza, e graf nie jest eulerowski).
172 Inny algorytm... procedure Euler( G ) begin stos := ; ce := ; stos.push( dowolny wierzchołek grafu ); while stos do begin v := stos.top; if deg(v) 0 then begin u ssiad v o najniszym indeksie; G := (V(G),E(G)\{{u,v}}); stos.push(u); end else begin (* deg(v) = 0 *) stos.pop(v); ce.push(v); end end end Zmienne: stos stos pomocniczy; ce stos przechowujcy wierzchołki w kolejnoci w jakiej tworz cykl Eulera Uwagi: operacja top zwraca wierzchołek na szczycie stosu, ale zawarto stosu si nie zmienia wynik działania procedury to cykl Eulera zapamitany w zmiennej ce deg zwraca stopie wierzchołka w zredukowanym grafie
17 Problem chiskiego listonosza Dana jest sie ulic oraz poczta. Aby listonosz dostarczył korespondencj musi przej wzdłu kadej ulicy co najmniej raz i powróci do punktu wyjcia. Formułujc problem w jzyku grafów, pytamy o najkrótsz zamknit marszrut w grafie G utworzonym na podstawie sieci ulic, w którym wagi krawdzi odpowiadaj długociom ulic. Znany jest efektywny algorytm rozwizujcy ten problem. Rozwaymy trzy przypadki: Przypadek 1: graf G jest eulerowski. Wówczas kady cykl Eulera jest optymalnym rozwizaniem, które mona znale korzystajc np. z algorytmu Fleury ego.
174 CPP: przypadek 2 Graf G jest półeulerowski. Znajdujemy ciek Eulera łczc dwa wierzchołki nieparzystego stopnia u i v. Nastpnie szukamy najkrótszej drogi z u do v. Łczc obie drogi otrzymujemy rozwizanie. Przykład 1) Droga Eulera: b a f b c d e c f e 2) Najkrótsza droga z e do b e f a b ) Trasa listonosza : b a f b c d e c f e f a b a 4 b 5 8 14 f 6 c 10 e 9 5 d
175 CPP: przypadek ogólny 1. Zidentyfikuj wierzchołki nieparzystego stopnia w grafie G. Niech W bdzie zbiorem takich wierzchołków. 2. Skonstruuj obciony graf pełny G o zbiorze wierzchołków W, w którym waga krawdzi {u,v} jest równa długoci najkrótszej cieki łczcej u z v w wyjciowym grafie G. 2 2 2 1 2 4 8 1 4 2 4 2 7 8 1 5 6
176 CPP: przypadek ogólny. Znajd minimalne skojarzenie dokładne (ang. minimum weight perfect matching) M w grafie G. 4. Dla kadej krawdzi e M dodaj krawdzie w grafie G, które odpowiadaj najkrótszej ciece odpowiadajcej e. 5. Nowo powstały graf jest eulerowski. 7 8 8 6 2 1 1 2 4 2 2 1 2 2 4 2 1 5 4