110 likes | 384 Views
Grafy. Rodzaje, przechodzenie grafu. Grafy podstawowe definicje. Grafem nazywamy strukturę G=(V,E) składającą się ze skończonego i niepustego zbioru wierzchołków V i zbioru krawędzi E. Krawędź od wierzchołków u do v oznaczamy jako (u,v).
E N D
Grafy Rodzaje, przechodzenie grafu
Grafy podstawowe definicje Grafem nazywamy strukturę G=(V,E) składającą się ze skończonego i niepustego zbioru wierzchołków V i zbioru krawędzi E. Krawędź od wierzchołków u do v oznaczamy jako (u,v). Drogą od wierzchołka v1 do vj nazywamy sekwencję krawędzi: (v1,v2), (v2,v3),…, (vn-1,vn) Dwa wierzchołki vi i vj nazywamysąsiędnimi, jeżeli w zbiorze D istnieje krawędź (vi,vj). Taką krawędź nazywamy incydentną do wierzchołków vi, vj. Stopniem wierzchołka v deg(v) – nazywamy liczbę krawędzi do niego incydentnych. Jeśli deg(v)=0 to jest to wierzchołek izolowany.
Rodzaje grafów: Grafy proste graf pełny – każdy wierzchołek jest połączony krawędzią z każdym wierzchołkiem
Rodzaje grafów: Grafy złożone Multigraf – dwa wierzchołki mogą być połączone kilkoma krawędziami Pseudograf – pojawiają się pętle czyli krawędzie wychodzące z i wchodzące do tego samego wierzchołka
5 4 2 6 1 5 5 2 Rodzaje grafów: Grafy złożone Graf skierowany – krawędzie, zwane też łukami, spełniają warunek (u,v)≠(v,u) Graf ważony – gdy krawędziom zostają przyporządkowane liczby – wagi
A B E C D Reprezentacja grafów Graf Lista sąsiedztwa
Reprezentacja grafów Macierz sąsiedztwa Macierz incydencji
Przechodzenie w głąb funkcja dfs() dfs() for wszystkie wierzcholki Visited[v]:=false; Ustaw wskaźnik current[v] na pierwszy wierzchołek na liście L[v] Odwiedz(p); visited[p]=true; If current[p] nie puste Stos pusty; push(stos,p); while stos jest niepusty v=wierzcholek(stos); niech w będzie wierzchołkiem wskazywanym przez current[v] przesuń wskaźnik current[v] do następnego wierzchołka na liście L if current[v]=pusty pop(stos); if not visited[w] odwiedz(w) visited[w]=true; if current[w] różne od nil then push(stos,w)
Przechodzenie grafów – wszerzfunkcja bfs() bfs() for wszystkie wierzcholki Visited[v]:=false; Ustaw wskaźnik current[v] na pierwszy wierzchołek na liście L[v] Odwiedz(p); visited[p]=true; If current[p] nie puste Kolejka pusta; enqueue(koljka,p); while stos jest niepusty v=początek(kolejka); niech w będzie wierzchołkiem wskazywanym przez current[v] przesuń wskaźnik current[v] do następnego wierzchołka na liście L if current[v]=pusty dequeue(kolejka); if not visited[w] odwiedz(w) visited[w]=true; if current[w] różne od nil then enqueue(kolejka,w)
Bibliografia • A. Drozdek, „C++. Algorytmy i struktury danych”, Helion, Gliwice 2004; • L. Banachowski, K. Diks, W. Rytter, „Algorytmy i struktury danych”, WNT, Warszawa1996;