Zadanie 17

Zaimplementuj algorytm rozwiązujący problem "wież w Hanoi" przy użyciu rekurencji.
Każde przesunięcie krążka ma być sygnalizowane odpowiednim napisem (pokazującym bieżący stan trzech wież) w następujący sposób: Uruchom procedurę dla 5 krążków i rezultat wstaw do sprawozdania.
 

Zadanie 18 (?)


Zaimplementuj algorytm rozwiązujący problem "wież w Hanoi" bez rekurencji.
 

Zadanie 19 (*)


Zaimplementuj algorytm Kruskala, znajdujący MST = "minimalne drzewo spinające".

(Poniżej przedstawiam przy pomocy rysunków niezbędne pojęcia ...)
Co to jest graf ?
Ten rysunek pokazuje przykładowy graf:

Co to jest drzewo ?
Jest to graf który nie zawiera cykli; poniższy rysunek pokazuje przykładowe drzewo:

Zauważmy że pojedynczy wierzchołek też jest drzewem.
Zbiór rozłącznych drzew nazywamy lasem.

Co to jest drzewo spinające ?
Jest to drzewo zawarte w grafie, zawierające wszystkie jego wierzchołki; poniższy rysunek pokazuje przykładowe drzewo spinające:
 
 
 
Dany jest graf G, którego krawędziom przyporządkowano "wagi". 
Minimalne drzewo spinające (=MST) to drzewo zawierające wszystkie wierzchołki grafu, takie że suma wag jego krawędzi jest minimalna (w porównaniu z sumą wag krawędzi innych drzew spinających). 

Minimalne drzewo spinające można znaleźć przy pomocy algorytmu Kruskala ...

 

Szkic algorytmu Kruskala:

  1. Na początku w grafie G jest "las spinajacy" który składa się z pojedynczych wierzchołków (wszystkich wierzchołków grafu G).
  2. Sortujemy krawędzie grafu G, niemalejąco, wg wag.
  3. Następnie przebiegamy po posortowanych krawędziach i dla krawędzi {v,u}wykonujemy:
  4. Po przejściu przez wszystkie krawędzie otrzymujemy pojedyncze drzewo (można udowodnić, że jest to właśnie mininalne drzewo spinające ...). Krawędzie tego drzewa znajduja się w tablicy wynikowej.
Uwagi do algorytmu Kruskala:

Każde drzewo lasu jest reprezentowane przez zbiór wierzchołków (zbiory te są rozłączne).

  1. Musimy mieć możliwość tworzenia zbiorów jednoelementowych (reprezentujących początkowy las).
  2. Mając dwa wierzchołki "v" i "u" musimy mieć możliwość sprawdzenia czy należą one do różnych zbiorów.
  3. Musimy mieć możliwość łączenia dwóch zbiorów wierzchołków
Sposób reprezentacji rozłącznych zbiorów pokazano na następującym rysunku:

Zauważ, że elementami zbiorów są indeksy tablicy. Reprezentantem każdego zbioru jest indeks pierwszego elementu odpowiedniej listy.
Należy zaimplementować następujące funkcje: Graf ma być reprezentowany przy pomocy odpowiedniej macierzy. Jeśli jest to graf na N-wierzchołkach
to należy przyjąć że wierzchołki grafu mają przyporządkowane liczby 0, ..., N-1.
Należy zaimplementować następujące funkcje: Należy wypróbować "algorytm Kruskala" w następujący sposób: