Lista-5

by Jerry Sky



W pliku test-graph.txt znajduje się podstawowy graf do testów zadań 2 i 3.

Zadanie 1

Napisz program, który symuluje działanie kolejki priorytetowej. Struktura powinna umożliwiać przechowywanie wartości typu int wraz z ich priorytetem, będącym nieujemną liczbą całkowitą przy czym najwyższym priorytetem jest wartość 00. Program nie powinien wymagać żadnych parametrów uruchomienia, a na standardowym wejściu przyjmuje dodatnią liczbę całkowitą MM (liczba operacji), a następnie (w liniach 22(M+1)(M + 1)) jedną z operacji:

Dla liczby elementów w kolejce nn, koszt operacji musi wynosić O(logn)O(log n), dla wszystkich poleceń z pominięciem print.

kod

Aby uruchomić program należy wykonać ./priority_queue.py.

Zadanie 2

Korzystając ze struktury zaimplementowanej w zadaniu 1 lub kopca Fibonacciego, zaimplementuj program realizujący algorytm Dijkstry, dla podanego grafu skierowanego G=(V,E)G = (V,E), znajdujący najkrótsze ścieżki z wybranego wierzchołka vVv \in V do każdego vV\overline{v} \in V.
Program nie powinien wymagać żadnych parametrów uruchomienia. Po uruchomieniu programu, na standardowym wejściu, podajemy definicję grafu GG oraz wierzchołek startowy vv. Kolejno wczytywane są:

Na standardowym wyjściu powinno zostać nn linii, w formacie id_celu waga_drogi, natomiast na standardowym wyjściu błędów powinny być wypisane dokładne ścieżki (tzn. wierzchołki pośrednie i wagi) do każdego z wierzchołków docelowych oraz czas działania programu w milisekundach.

kod

Aby uruchomić program należy wykonać ./dijkstra.py <test-graph.txt dla przykładowego grafu.

Zadanie 3

Korzystając ze struktury z zadania 1 zaimplementuj algorytmy znajdujące dla podanego grafu nieskierowanego G=(V,E)G = (V,E) minimalne drzewa rozpinające.

Program powinien umożliwiać wykonanie algorytmu Prima (parametr uruchomienia -p) oraz algorytmu Kruskala (parametr uruchomienia -k). Niezależnie od parametru uruchomienia, dane wejściowe przyjmują postać:

Na standardowym wyjściu powinny zostać wypisane, w kolejnych liniach krawędzie u v w użyte w drzewie rozpinającym (przyjmujemy, że u<vu < v) oraz łączną wagę drzewa rozpinającego.

kod

Aby uruchomić program należy wykonać ./msts.py <test-graph.txt dla przykładowego grafu.