R1GJG6M5BA9OA
Zdjęcie przedstawia widok z satelity, na którym widać oświetlenie większych miast.

I_R_W14_M38_Java Podejście zachłanne. Najkrótsza droga w grafie

Źródło: NASA, domena publiczna.
Już wiesz
  • jak działa podejście zachłanne i potrafisz wskazać, w którym momencie algorytm Dijkstry podejmuje lokalnie najlepszą decyzję,

  • umiesz przeanalizować kolejne kroki algorytmu na grafie ważonym, odczytać wartości w tablicach d i p oraz określić, kiedy wierzchołek zostaje oznaczony jako „odwiedzony”,

  • potrafisz przełożyć pseudokod na działający program w Javie, uruchomić go na przykładzie i zinterpretować otrzymane wyniki,

  • wiesz jak zmodyfikować implementację, aby działała dla różnych reprezentacji grafów.

Teraz czas sprawdzić swoją wiedzę i umiejętności w praktyce.

R1MLBVSD4PJ2V
Ćwiczenie 1
Zdecyduj, czy następujące zdanie jest prawdziwe.
Wynik działania algorytmu Dijkstry dla każdego grafu skierowanego będzie poprawny.
RPJL89HVFXUCA
Ćwiczenie 2
Zdecyduj, czy następujące zdanie jest prawdziwe.
Wynik działania algorytmu Dijkstry dla każdego grafu będzie poprawny.
Ćwiczenie 3

Zapoznaj się z pseudokodem.

Linia 1. Dijkstra otwórz nawias okrągły lista podkreślnik sąsiedztwa przecinek s zamknij nawias okrągły dwukropek. Linia 2. S ← utwórz pustą tablicę. Linia 3. V ← utwórz tablicę i wypełnij ją wierzchołkami. Linia 4. d ← utwórz pustą tablicę. Linia 5. p ← utwórz pustą tablicę. Linia 7. dla każdego elementu u w tablicy V dwukropek. Linia 8. d otwórz nawias kwadratowy u zamknij nawias kwadratowy ← ∞. Linia 9. p otwórz nawias kwadratowy u zamknij nawias kwadratowy ← minus 1. Linia 11. d otwórz nawias kwadratowy s zamknij nawias kwadratowy ← 0. Linia 13. dopóki długość otwórz nawias okrągły V zamknij nawias okrągły zamknij nawias ostrokątny 0 dwukropek. Linia 14. najkrótsza podkreślnik ścieżka ← ∞. Linia 15. u ← minus 1. Linia 17. dla każdego elementu v w tablicy V dwukropek. Linia 18. jeśli najkrótsza podkreślnik ścieżka zamknij nawias ostrokątny d otwórz nawias kwadratowy v zamknij nawias kwadratowy dwukropek. Linia 19. najkrótsza podkreślnik ścieżka ← d otwórz nawias kwadratowy v zamknij nawias kwadratowy. Linia 20. u ← v. Linia 22. S ← umieść element u na końcu tablicy. Linia 23. V ← usuń element u z tablicy. Linia 25. dla każdego elementu v w tablicy lista podkreślnik sąsiadów otwórz nawias kwadratowy u zamknij nawias kwadratowy dwukropek. Linia 26. jeśli d otwórz nawias kwadratowy v zamknij nawias kwadratowy zamknij nawias ostrokątny d otwórz nawias kwadratowy u zamknij nawias kwadratowy plus w otwórz nawias okrągły u przecinek v zamknij nawias okrągły dwukropek. Linia 27. d otwórz nawias kwadratowy v zamknij nawias kwadratowy ← d otwórz nawias kwadratowy u zamknij nawias kwadratowy plus w otwórz nawias okrągły u przecinek v zamknij nawias okrągły. Linia 28. p otwórz nawias kwadratowy v zamknij nawias kwadratowy ← u. Linia 30. zwróć d przecinek p.
RT1XEV2L8ES4H
Połącz w pary zmienne z ich zastosowaniami. prev[] Możliwe odpowiedzi: 1. wierzchołek dodawany do zbioru S unikalny dla każdej iteracji, 2. zbiór wszystkich wierzchołków grafu, 3. tablica kosztów dojścia do każdego wierzchołka, 4. zbiór wierzchołków, do których najmniejsze koszty dojścia zostały wyznaczone, 5. tablica przechowująca poprzedniki wierzchołków d[] Możliwe odpowiedzi: 1. wierzchołek dodawany do zbioru S unikalny dla każdej iteracji, 2. zbiór wszystkich wierzchołków grafu, 3. tablica kosztów dojścia do każdego wierzchołka, 4. zbiór wierzchołków, do których najmniejsze koszty dojścia zostały wyznaczone, 5. tablica przechowująca poprzedniki wierzchołków u Możliwe odpowiedzi: 1. wierzchołek dodawany do zbioru S unikalny dla każdej iteracji, 2. zbiór wszystkich wierzchołków grafu, 3. tablica kosztów dojścia do każdego wierzchołka, 4. zbiór wierzchołków, do których najmniejsze koszty dojścia zostały wyznaczone, 5. tablica przechowująca poprzedniki wierzchołków S Możliwe odpowiedzi: 1. wierzchołek dodawany do zbioru S unikalny dla każdej iteracji, 2. zbiór wszystkich wierzchołków grafu, 3. tablica kosztów dojścia do każdego wierzchołka, 4. zbiór wierzchołków, do których najmniejsze koszty dojścia zostały wyznaczone, 5. tablica przechowująca poprzedniki wierzchołków V Możliwe odpowiedzi: 1. wierzchołek dodawany do zbioru S unikalny dla każdej iteracji, 2. zbiór wszystkich wierzchołków grafu, 3. tablica kosztów dojścia do każdego wierzchołka, 4. zbiór wierzchołków, do których najmniejsze koszty dojścia zostały wyznaczone, 5. tablica przechowująca poprzedniki wierzchołków
1
Ćwiczenie 4
RP2XD5J1MVU3111

Zapoznaj się z ilustracją pewnego grafu.

R1DDB6QHO9RG2
Wskaż wszystkie warianty tablic wyjściowych d i p, które może zwrócić algorytm Dijkstry dla zaprezentowanego grafu skierowanego.
1
Ćwiczenie 5
1
R14SS7ECZKDJ1
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.
R24L74X7MLD1E
Przyjmując za wierzchołek początkowy A, wskaż grafy, dla których algorytm Dijkstry nie zwróci poprawnego wyniku.
Ćwiczenie 6
RU821QGJCCM6E
Grafika przedstawia graf z węzłami i  łączących je prostymi oznaczonymi cyframi. krawędzie: 7, 1, 1 , 4, 10, 6, 5, 2.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
R1JZR8G6446TH
Zapoznaj się poniższym opisem, a następnie wykonaj polecenie.
Graf składa się z sześciu wierzchołków oznaczonych od A do F. Wierzchołki połączone są krawędziami, tworzacymi sześciokąt. Ponadto dwie krawędzie zostały zaznaczone pomiędzy wierzchołkami wten sposób, że znajdują się w polu sześciokąta. Od wierzchołka A popdorwadzone sa dwie krawędzie do wierzchołka B o długości dziesięć i do wierzchołka C o długości sześć. Od wierzchołka B odchodzą dwie krawędzie. Pierwsza o długości cztery łączy go z wierzhcołkiem E, natomiast druga o długości dwa z wierzchołkiem F.Od wierzchołka C odchodzą dwie krawędzie. Pierwsza o długości siedem łączy wierzchołek C z wierzchołkiem D, natomiast druga o długości pięć z wierzchołkiem F. Warości dla krawędzi łączących odpowiednio wierzchołki D F oraz E F nie podano.
Wskaż długości ścieżek łączących, odpowiednio wierzchołki D F oraz E F, aby algorytm Dijkstry zwrócił następujący wynik:
d = { 6, 7, 0, 7, 6, 5 },
p = { C, F, NULL, C, F, C }

Materiał źródłowy do ćwiczeń 7–8

R1V7E6DUR1ERT
R4TUMFGLKNNP6
Ćwiczenie 7
W zaprezentowanym grafie s = E. Wskaż poprzednika, jeśli u = A.
RRZTEEDTNXPZ7
Ćwiczenie 8
W zaprezentowanym grafie s = A. Wskaż poprawną długość najkrótszej ścieżki, jaką należy pokonać, by od wierzchołka s dojść do wierzchołka u = B.
Polecenie 1

Zapisz program z polecenia nr 1, używając wybranego języka programowania.

Działanie programu przetestuj dla następującego grafu:

RXGBR4F91RSKB

Specyfikacja problemu:

Dane:

  • lista_sąsiedztwa – lista sąsiedztwa grafu nieskierowanego o dodatnich wagach

  • s – wierzchołek początkowy grafu

Wynik:

  • tablica przechowujące najkrótsze ścieżki od wierzchołka s do pozostałych wierzchołków oraz tablica przechowująca poprzedniki kolejnych wierzchołków

R1N49QCGLFANU
31
Ćwiczenie 9

Napisz program, który dla grafu reprezentowanego przez macierz sąsiedztwa wypisze dwie tablice – najkrótszych ścieżek do danych wierzchołków oraz poprzedników tych wierzchołków.

Działanie programu przetestuj dla następujących danych:

Linia 1. int otwórz nawias kwadratowy zamknij nawias kwadratowy otwórz nawias kwadratowy zamknij nawias kwadratowy macierzSasiedztwa znak równości otwórz nawias klamrowy. Linia 2. otwórz nawias klamrowy 0 przecinek 5 przecinek 4 przecinek 2 przecinek 7 zamknij nawias klamrowy przecinek. Linia 3. otwórz nawias klamrowy 5 przecinek 0 przecinek 1 przecinek 0 przecinek 8 zamknij nawias klamrowy przecinek. Linia 4. otwórz nawias klamrowy 4 przecinek 1 przecinek 0 przecinek 22 przecinek 4 zamknij nawias klamrowy przecinek. Linia 5. otwórz nawias klamrowy 2 przecinek 0 przecinek 22 przecinek 0 przecinek 0 zamknij nawias klamrowy przecinek. Linia 6. otwórz nawias klamrowy 7 przecinek 8 przecinek 4 przecinek 0 przecinek 0 zamknij nawias klamrowy. Linia 7. zamknij nawias klamrowy średnik. Linia 9. int s znak równości 4 średnik.

Specyfikacja problemu:

Dane:

  • s – wierzchołek początkowy grafu

  • macierzSasiedztwa – tablica dwuwymiarowa; macierz sąsiedztwa grafu

  • V – liczba naturalna dodatnia; liczba wierzchołków grafu

Wynik:

  • tablica przechowująca najkrótsze ścieżki od wierzchołka s do pozostałych wierzchołków oraz tablica przechowująca poprzedniki kolejnych wierzchołków

Wynik dla podanych danych:

Linia 1. Wynik algorytmu Dijkstry dwukropek. Linia 2. d otwórz nawias kwadratowy zamknij nawias kwadratowy znak równości otwórz nawias kwadratowy 7 przecinek 5 przecinek 4 przecinek 9 przecinek 0 zamknij nawias kwadratowy. Linia 3. p otwórz nawias kwadratowy zamknij nawias kwadratowy znak równości otwórz nawias kwadratowy 4 przecinek 2 przecinek 4 przecinek 0 przecinek minus 1 zamknij nawias kwadratowy.
R1DQ5xS7JpnoT
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
1
Ćwiczenie 10

Napisz program, który dla danej tablicy poprzedników grafu wypisze kompletne ścieżki do kolejnych wierzchołków. Ścieżki powinny zaczynać się w wierzchołku początkowym, a kończyć na docelowym.

Działanie programu przetestuj dla następujących danych:

Linia 1. static int otwórz nawias kwadratowy zamknij nawias kwadratowy p znak równości otwórz nawias klamrowy 4 przecinek 2 przecinek 4 przecinek 0 przecinek minus 1 zamknij nawias klamrowy średnik.

Specyfikacja problemu:

Dane:

  • p – tablica poprzedników; tablica liczb całkowitych

  • V – liczba naturalna dodatnia; liczba wierzchołków grafu

Wynik:

  • komunikat dotyczący najkrótszych ścieżek do kolejnych wierzchołków

Wynik dla podanych danych:

Linia 1. Sciezka do 0 dwukropek 4 0. Linia 2. Sciezka do 1 dwukropek 4 2 1. Linia 3. Sciezka do 2 dwukropek 4 2. Linia 4. Sciezka do 3 dwukropek 4 0 3. Linia 5. Sciezka do 4 dwukropek 4.
RcQqJn364Py1r
Wymyśl pytanie na kartkówkę związane z tematem materiału.
1
Ćwiczenie 11

Zmodyfikuj program tak, by algorytm Dijkstry działał dla grafu, którego każda krawędź ma wagę równą 1.

Działanie programu przetestuj dla następujących danych:

Linia 1. static final int otwórz nawias kwadratowy zamknij nawias kwadratowy otwórz nawias kwadratowy zamknij nawias kwadratowy listaSasiedztwa znak równości otwórz nawias klamrowy. Linia 2. otwórz nawias klamrowy 3 przecinek 4 przecinek 1 przecinek 2 przecinek 5 przecinek minus 1 zamknij nawias klamrowy przecinek. Linia 3. otwórz nawias klamrowy 0 przecinek 2 przecinek 4 przecinek 5 przecinek 3 przecinek minus 1 zamknij nawias klamrowy przecinek. Linia 4. otwórz nawias klamrowy 3 przecinek minus 1 przecinek minus 1 przecinek minus 1 przecinek minus 1 przecinek minus 1 zamknij nawias klamrowy przecinek. Linia 5. otwórz nawias klamrowy 5 przecinek minus 1 przecinek minus 1 przecinek minus 1 przecinek minus 1 przecinek minus 1 zamknij nawias klamrowy przecinek. Linia 6. otwórz nawias klamrowy 1 przecinek 2 przecinek minus 1 przecinek minus 1 przecinek minus 1 przecinek minus 1 zamknij nawias klamrowy przecinek. Linia 7. otwórz nawias klamrowy 1 przecinek 2 przecinek minus 1 przecinek minus 1 przecinek minus 1 przecinek minus 1 zamknij nawias klamrowy. Linia 8. zamknij nawias klamrowy średnik. Linia 10. int s znak równości 4 średnik.

Specyfikacja problemu:

Dane:

  • listaSasiedztwa – tablica dwuwymiarowa; lista sąsiedztwa grafu

  • s – wierzchołek początkowy grafu

  • V – liczba naturalna dodatnia; liczba wierzchołków grafu

Wynik:

  • tablica przechowująca najkrótsze ścieżki od wierzchołka s do pozostałych wierzchołków oraz tablica przechowująca poprzedniki kolejnych wierzchołków

Wynik dla podanych danych:

Linia 1. Wynik algorytmu Dijkstry dwukropek. Linia 2. d otwórz nawias kwadratowy zamknij nawias kwadratowy znak równości otwórz nawias klamrowy 2 1 1 2 0 2 zamknij nawias klamrowy. Linia 3. p otwórz nawias kwadratowy zamknij nawias kwadratowy znak równości otwórz nawias klamrowy 1 4 4 1 minus 1 1 zamknij nawias klamrowy.
R1GzFwk63Rmpb
Wymyśl pytanie na kartkówkę związane z tematem materiału.