Zadanie 11

Zaimplementuj algorytm Kruskala, znajdujący MST = "minimalne drzewo spinające".
Dany jest graf G, którego krawędziom przyporządkowano "wagi".  Mininalne drzewo spinające 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).

Szkic algorytmu Kruskala:

  1. W grafie G jest "las spinajacy", który początkowo składa się z pojedynczych wierzchołków.
  2. Sortujemy krawędzie grafu G, niemalejąco, wg wag.
  3. Następnie dla każdej krawędzi {v,u}, w kolejności niemalejących wag:
  4. Po przejściu przez wszystkie krawędzie otrzymujemy pojedyncze drzewo (można udowodnić, że jest to właśnie mininalne drzewo spinające ...)
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 list sąsiadów, jak to widać na następującym rysunku:

Zauważ, że każdy wierzchołek jest reprezentowany przez indeks tablicy, której element jest wskazaniem na głowę listy sąsiadów.

Należy zaimplementować następujące funkcje:

Sortowanie krawędzi wg wag należy wykonać przy pomocy następujących funkcji: Algorytm Kruskala powinien zapisywać krawędzie w "liście A" : Należy wypróbować algorytm w następujący sposób:  

Zadanie domowe 3


Zaimplementu algorytm Prima znajdujący MST (Cormen, str 570).
 

Zadanie domowe 4


Zaimplementuj drzewa ukorzenione dowolnego stopnia.

Każdy wierzchołek powinien być reprezentowany przez strukturę "Wierzchołek".  Zasadniczo odwołujemy się do
wierzchołków poprzez podanie wskazania do tej struktury.  Struktura Wierzchołek powinna posiadać listę, której
elementami są wskazania do potomków wierzchołka.  Wierzchołkom można przyporządkować Identyfikatory
pomocne przy tworzeniu drzewa.  Każdy wierzchołek posiada liczbę całkowitą w polu Element struktury
Wierzchołek.  Powinno być możliwe:

   1.uzyskiwanie wskazania na strukturę Wierzchołek na podstawie identyfikatora wierzchołka
   2.dodawanie potomka do dowolnego wierzchołka drzewa
   3.wypisywanie elementów drzewa (dowolnym sposobem)