Grafy. Andrzej Jastrz bski. Akademia ET I. Politechnika Gda«ska

Podobne dokumenty
Algorytmy grafowe 2. Andrzej Jastrz bski. Akademia ETI. Politechnika Gda«ska Algorytmy grafowe 2

Podstawowe algorytmy grafowe i ich zastosowania

Podstawowe algorytmy grafowe i ich zastosowania

Algorytmy tekstowe. Andrzej Jastrz bski. Akademia ETI

Teoria grafów i jej zastosowania. 1 / 126

Najkrótsze drogi w grafach z wagami

c Marcin Sydow Wst p Grafy i Zastosowania Wierzchoªki 8: Kolorowanie Grafów Mapy Kraw dzie Zliczanie Podsumowanie

c Marcin Sydow Spójno± Grafy i Zastosowania Grafy Eulerowskie 2: Drogi i Cykle Grafy Hamiltonowskie Podsumowanie

Matematyczne Podstawy Informatyki

Zadania z kolokwiów ze Wst pu do Informatyki. Semestr II.

Wykład 10 Grafy, algorytmy grafowe

10a: Wprowadzenie do grafów

Mosty królewieckie, chi«ski listonosz i... kojarzenie maª»e«stw

Zad. 1 Zad. 2 Zad. 3 Zad. 4 Zad. 5 SUMA. W obu podpunktach zakªadamy,»e kolejno± ta«ców jest wa»na.

Minimalne drzewa rozpinaj ce

Najkrótsze drogi w grafach z wagami

12: Znajdowanie najkrótszych ±cie»ek w grafach

Grafy i Zastosowania. 1: Wprowadzenie i poj cia podstawowe. c Marcin Sydow. Wprowadzenie. Podstawowe poj cia. Operacje na grafach.

Teoria grafów i sieci 1 / 58

Ogólne wiadomości o grafach

Porównanie algorytmów wyszukiwania najkrótszych ścieżek międz. grafu. Daniel Golubiewski. 22 listopada Instytut Informatyki

Podziaª pracy. Cz ± II. 1 Tablica sortuj ca. Rozwi zanie

c Marcin Sydow Przepªywy Grafy i Zastosowania Podsumowanie 12: Przepªywy w sieciach

Programowanie i struktury danych

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

Algorytmy grafowe. Wykład 2 Przeszukiwanie grafów. Tomasz Tyksiński CDV

Algorytmy i Struktury Danych.

Stereometria (geometria przestrzenna)

Wykªad 1. Wprowadzenie do teorii grafów

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Rekurencyjne struktury danych

Drzewa Gomory-Hu Wprowadzenie. Drzewa Gomory-Hu. Jakub Š cki. 14 pa¹dziernika 2009

Algorytmy i Struktury Danych.

Biedronka. Wej±cie. Wyj±cie. Przykªady. VI OIG Zawody dru»ynowe, Finaª. 19 V 2012 Dost pna pami : 64 MB.

c Marcin Sydow Grafy i Zastosowania BFS DFS 4: Przeszukiwanie Grafów (BFS, DFS i zastosowania) DFS nieskierowane DFS skierowane Podsumowanie

Relacj binarn okre±lon w zbiorze X nazywamy podzbiór ϱ X X.

Języki programowania, wtorek , 12:15-13:45 Zadanie 11 - ostatnie

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Grafy i Zastosowania. 9: Digrafy (grafy skierowane) c Marcin Sydow. Digrafy. Porz dki cz ±ciowe * Euler i Hamilton. Turnieje

c Marcin Sydow Planarno± Grafy i Zastosowania Tw. Eulera 7: Planarno± Inne powierzchnie Dualno± Podsumowanie

Programowanie obiektowe W3

Temat: Struktury danych do reprezentacji grafów. Wybrane algorytmy grafowe.

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

tablica: dane_liczbowe

TEORIA GRAFÓW. Graf skierowany dla ka»dej kraw dzi (oznaczanej tutaj jako ªuk) para wierzchoªków incydentnych jest par uporz dkowan {u, v}.

Algorytmy Grafowe. dr hab. Bożena Woźna-Szcześniak, prof. UJD. Wykład 1,2,3. Uniwersytet Humanistyczno-Przyrodniczy im. Jana Długosza w Częstochowie

Podstawowepojęciateorii grafów

Teoria grafów i sieci 1 / 188

1 a + b 1 = 1 a + 1 b 1. (a + b 1)(a + b ab) = ab, (a + b)(a + b ab 1) = 0, (a + b)[a(1 b) + (b 1)] = 0,

Dynamiczne struktury danych

Elementy teorii grafów, sposoby reprezentacji grafów w komputerze

a) 7 b) 19 c) 21 d) 34

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

Lab. 02: Algorytm Schrage

Programowanie i struktury danych

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Programowanie komputerowe. Zajęcia 5

ZASADY PROGRAMOWANIA KOMPUTERÓW

1. Wprowadzenie do C/C++

Wykªad 4. Droga i cykl Eulera i Hamiltona

Programowanie Procedurale

Notatki z AiSD. Nr 2. 4 marca 2010 Algorytmy Zachªanne.

Grafy i Zastosowania. 6: Najkrótsze ±cie»ki. c Marcin Sydow. Najkrótsze cie»ki. Warianty. Relaksacja DAG. Algorytm Dijkstry.

. Podstawy Programowania 2. Algorytmy dfs i bfs. Arkadiusz Chrobot. 2 czerwca 2019

Programowanie komputerowe. Zajęcia 4

Wektory w przestrzeni

Dynamiczny przydział pamięci (język C) Dynamiczne struktury danych. Sortowanie. Klasyfikacja algorytmów sortowania. Algorytmy sortowania

Elementy teorii grafów, sposoby reprezentacji grafów w komputerze

Struktury. Przykład W8_1

Algorytm DFS Wprowadzenie teoretyczne. Algorytm DFS Wprowadzenie teoretyczne. Algorytm DFS Animacja. Algorytm DFS Animacja. Notatki. Notatki.

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

Technologie cyfrowe semestr letni 2018/2019

Wstęp do programowania

Przykłady grafów. Graf prosty, to graf bez pętli i bez krawędzi wielokrotnych.

Problemy optymalizacyjne - zastosowania

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Zmienne i struktury dynamiczne

1. Wprowadzenie do C/C++

Algorytmy i Struktury Danych

Proste programy w C++ zadania

int tab_a [ 2 ] [ 3 ];

Programowanie i struktury danych

1) Grafy eulerowskie własnoci algorytmy. 2) Problem chiskiego listonosza

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Paradygmaty programowania. Paradygmaty programowania

Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach

Programowanie wspóªbie»ne

Aplikacje bazodanowe. Laboratorium 1. Dawid Poªap Aplikacje bazodanowe - laboratorium 1 Luty, 22, / 37

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Wykªad 7. Ekstrema lokalne funkcji dwóch zmiennych.

DYNAMICZNE PRZYDZIELANIE PAMIECI

c Marcin Sydow Podstawy Grafy i Zastosowania Kod Prüfera 3: Drzewa Drzewa ukorzenione * Drzewa binarne Zastosowania Podsumowanie

. Podstawy Programowania 2. Grafy i ich reprezentacje. Arkadiusz Chrobot. 9 czerwca 2016

A. Auxiliary Question of the Universe

Techniki Programowania wskaźniki 2

Wstęp do programowania

Transkrypt:

Andrzej Jastrz bski Akademia ET I

Graf Grafem nazywamy par G = (V, E), gdzie V to zbiór wierzchoªków, E zbiór kraw dzi taki,»e E {{u, v} : u, v V u v}. Wierzchoªki v, u V s s siaduj ce je±li s poª czone kraw dzi ( e E {v, u} = e). Wierzchoªek v V jest incydentny do kraw dzi e E je±li v jest jednym z ko«ców e (v e). Kraw dzie e, f E s s siaduj ce je±li s incydentne do tego samego wierzchoªka ( v V v e u f ). mo»na reprezentowa na pªaszczy¹nie jako kropki (wierzchoªki) i linie pomi dzy kropkami (kraw dzie).

Reprezentacja grafu S dwie podstawowe metody reprezentacji grafu: macierz s siedztwa listy s siedztwa Modykacj list s siedztwa jest reprezentacja przez p ki wyj±ciowe.

reprezentacja graczna 1 2 3 1 2 3 listy s siedztwa 3 3 2 1 1 3 p ki wyj±ciowe macierz s siedztwa 0 0 1 1 0 0 1 0 1 1 0 1 1 0 1 0 0 2 3 3 3 2 1 1 3? 0 1 2 3 0 1 2 3

Macierz s siedztwa Macierz s siedztwa, to macierz kwadratowa o rozmiarze V V wypeªniona liczbami 0 i 1. Ponumerujmy wierzchoªki od 1 do V. W i-tej kolumnie i j-tym wierszu jest liczba 1 wtedy i tylko wtedy, gdy wierzchoªek i-ty jest s siedni z wierzchoªkiem j-tym.

Przykªady We wszystkich przykªadach b dziemy zakªadali,»e graf do programu jest w podany ni»ej sposób. Najpierw podane s dwie liczby n liczba wierzchoªków i m liczba kraw dzi. Nast pnie podanych jest m par liczb opisuj cych s siednie wierzchoªki. Wierzchoªki liczymy od 0. 3 3 0 1 1 2 2 0

Czytanie grafu - macierz s siedztwa int main() { int **G; int n, m, v, u; cin >> n >> m; G = new int*[n]; //tworzenie dwuwymiarowej tablicy for(int i=0; i<n; i++) { G[i] = new int[n]; for(int j=0; j<n; j++) G[i][j] = 0; } for(int i=0; i<m; i++) { cin >> v >> u; //czytanie s siadów G[u][v] = G[v][u] = 1; }. //dowolny algorytm for(int i=0; i<n; i++) delete [] G[i]; //kasowanie delete [] G; return 0; }

Czytanie grafu - macierz s siedztwa w STLu int main() { vector< vector<int> > G; int n, m, v, u; cin >> n >> m; G.resize(n); //tworzenie dwuwymiarowej tablicy for(int i=0; i<n; i++) { G[i].resize(n); for(int j=0; j<n; j++) G[i][j] = 0; } for(int i=0; i<m; i++) { cin >> v >> u; //czytanie s siadów G[u][v] = G[v][u] = 1; }. //dowolny algorytm //kasowanie odbywa si automatycznie return 0; }

Czytanie grafu - listy s siedztwa struct Node { int v; Node *next; }; int main() { Node **G, *tmp; int n, m, v, u; cin >> n >> m; G = new Node*[n]; //tworzenie punktu wej±cia do list for(int i=0; i<n; i++) G[i] = NULL; //zerowanie for(int i=0; i<m; i++) { cin >> u >> v; tmp = new Node; //tworzenie s siada wierzchoªka v tmp->v = u; tmp->next = G[v]; G[v] = tmp; tmp = new Node; //tworzenie s siada wierzchoªka u tmp->v = v; tmp->next = G[u]; G[u] = tmp; }. //dowolny algorytm

Czytanie grafu - listy s siedztwa cd. }. for(int i=0; i<n; i++) {//kasowanie list Node *del = G[i]; while(del!=null) { tmp = del->next; delete del; del = tmp; } } delete [] G;

Czytanie grafu - listy s siedztwa w STLu int main() { vector< list<int> > G; int n, m, v, u; cin >> n >> m; G.resize(n); //tworzenie punktu wej±cia do list for(int i=0; i<m; i++) { cin >> u >> v; G[u].push_back(v); G[v].push_back(u); }. //dowolny algorytm //kasowanie odbywa si automatycznie return 0;

Odwiedzanie wierzchoªków Ni»ej przedstawione zostan dwa algorytmy odwiedzania wierzchoªków: BFS przeszukiwanie wszerz DFS przeszukiwanie w gª b

BFS void BFS(graf G, wierzcholek v) { char odwiedzone[ V(G) ]; //zerowanie S kolejka FIFO S.push(v) odwiedzone[v]=1; while(! S.empty() ) { foreach u in G.neigh(v) { if( odwiedzone[u]==0 ) { odwiedzone[u]=1; S.push(u); } } } }

S

S 3

S

S,, 2

S,, 2

S, 2

S, 2,

S, 2,

S 2,

S 2,,

S 2,,

S,

S,, 1

S,, 1

S, 1

S, 1,

S, 1,

S 1,

S 1,

S 1,

S

S

S

S

S

S

DFS void DFSViz(graf G, wierzcholek v, char odw[]) { odw[v] = 1; foreach u in G.neigh(v) { if( odw[u]==0 ) DFSViz(G, u, odw); } } void DFS(graf G, wierzcholek v) { char odwiedzone[ V(G) ]; DFS(G, v, odwiedzone); }

Znajdowanie najkrótszej ±cie»ki Mamy dany graf z dodatnimi wagami na kraw dziach oraz dwa wierzchoªki z tego grafu. W jaki sposób wyszuka najkrótsz drog pomi dzy tymi wierzchoªkami?

Algorytm Dijkstry int sciezka(graf G, wierz v1, wierz v2) { int odl[ V(G) ]; S- kolejka priorytetowa; foreach v in G odl[v] = ; odl[v1]=0; S.push(V(G)); while(! S.empty() ) { v = S.pop(); //element o najmniejszej wadze foreach u in G.neigh(v) { if( odl[u]>odl[v]+g.weight(u,v) ) odl[u] = odl[v]+g.weight(u,v); } } return odl[v2]; }

1 1 2 1 3 2 1 1 1 1 2 3

1 1 2 1 3 2 1 1 1 0 1 2 3

1 1 2 1 3 2 1 1 1 0 1 2 3

1 1 2 1 3 2 1 1 1 1 0 2 1 2 3

1 1 2 1 3 2 1 1 1 1 0 2 1 2 3

1 1 2 1 3 2 1 1 1 2 1 0 2 1 2 3

1 1 2 1 3 2 1 1 1 2 1 0 2 1 2 3

1 1 2 1 3 2 1 1 1 2 1 0 2 3 1 2 3

1 1 2 1 3 2 1 1 1 2 1 0 2 3 1 2 3

1 1 2 1 3 2 1 1 1 2 1 0 2 3 1 2 3

1 1 2 1 3 2 1 1 1 2 1 0 2 3 1 2 3

1 1 2 1 3 2 1 1 1 2 1 0 2 3 1 2 3

1 1 2 1 3 2 1 1 1 2 1 0 2 3 1 2 3

1 1 2 1 3 2 1 1 1 2 1 0 2 3 1 2 3

1 1 2 1 3 2 1 1 1 2 1 0 2 3 1 2 3

1 1 2 1 3 2 1 1 1 2 1 0 2 3 1 2 3

1 1 2 1 3 2 1 1 1 2 1 0 2 3 1 2 3

1 1 2 1 3 2 1 1 1 2 1 0 2 3 1 2 3