Otto-von-Guericke Universit¨at Magdeburg Institut f¨ur Mathematische Optimierung
Sommersemester 2018
Priv.-Doz. Dr. Gennadiy Averkov Clemens Zeile
Felix Jost
Programmierprojekt zur Vorlesung
Algorithmische Mathematik II
(Abgabe: sp¨atestens am 21.06.2018)
Die Aufgabe
Implementieren Sie in C++ zwei Varianten des in der Vorlesung kennengelernten Dijkstra- Algorithmus, welcher f¨ur gegebene Knotens, t∈V den k¨urzesten Weg berechnet:
• auf der Basis von unsortierten Arrays und sequentieller Suche (vgl. Bemerkung 1.19),
• mittels Verwendung eines Heap wie in der Vorlesung Algorithmischer Mathematik 1 vor- gestellt.
Format der Ein- und Ausgabe
Als Eingabe soll Ihr ProgrammDistance graph-Dateien der folgenden Homepage http://www.diag.uniroma1.it/challenge9/download.shtml
einlesen k¨onnen. Hierbei soll die Eingabe der Dateien mit sinnvollen Kommentaren begleitet werden. Letztere Dateien sollen automatisch eingelesen werden k¨onnen ohne vorherige manuel- le ¨Anderungen der Input-Datei. Des Weiteren soll ¨uber die Kommandozeile folgende Eingabe erfolgen
variant (array o. heap) | output (distance o. path) | source node | dest. node |name of file wobei der User bei der Ausgabepr¨aferenz zwischen der L¨ange des k¨urzesten Weges und dem k¨urzesten Weg selbst (als Folge von Knoten) w¨ahlen kann. Die Ausgabe des Programms soll in der Konsole erfolgen und je nach Wahl der Ausgabepr¨aferenz gestaltet werden. Beispiele:
myprog array path 1 10 input1.txt
bedeutet, dass Ihr Programm myprog auf der Basis von sortierten Arrays einen k¨urzesten Weg von Knoten 1 zum Knoten 10 des in input1.txt definierten Graphen finden soll und dann dieser als Folge von Knoten ausgegeben werden soll.
myprog heap distance 2 17 input1.txt
bedeutet, dass Ihr Programmmyprog auf der Basis von Heaps einen k¨urzesten Weg von Knoten 2 zum Knoten 17 des in input1.txt definierten Graphen finden soll und dann die Distanz von Knoten 2 zu 17 ausgegeben werden soll.
Erl¨auterung der Distance graph-Dateien :
Sei der gegebene Digraph G= (V, E, w) mit gewichteten Kanten und n:= |V|, m :=|E|. Die Distance graph-Dateien enthalten folgende Zeilen
• Kommentare, beginnend mit ”c“ und sind zu ignorieren,
• ”p“ gefolgt von ”sp“ und der Anzahl an Knoten und Kanten (einmalige Zeile),
• ”a“ f¨urarcs gefolgt von Start- sowie Endknoten der Kante und des Gewichts der Kante.
Beispiel:
1
2 3
4 1
10
2
5 3
w¨urde als Distance graph-Datei wie folgt aussehen:
c Beispiel 1.11 aus der Vorlesung p sp 4 5
a 1 2 1
a 1 4 5
a 2 3 10
a 2 4 3
a 4 3 2
Rahmenbedingungen zu C++-Bibliotheken
Folgende Bibliotheken d¨urfen Sie f¨ur Ihren Code verwenden:
• < iostream >
• < f stream >
• < sstream >
• < string >
• < vector >
• < array >
Hinweise zur Abgabe
• Es ist vorgesehen, dass Sie das Projekt in Gruppen bestehend aus zwei bis drei Studieren- den bearbeiten.
• Jede einzelne Quell-Datei soll mit einem Kommentar der Form
%Vorname1 Nachname1 Matrikelnummer1
%Vorname2 Nachname2 Matrikelnummer2
%Vorname3 Nachname3 Matrikelnummer3
beginnen
• Alle zum Kompilieren notwendigen .cpp- und .hpp-Dateien f¨ur jede einzelne Aufgabe sollen in einem Ordner mit dem NamenNachname1 Nachname2 Nachname3 enthalten sein. Der Ordner soll gezippt werden und die .zip-Datei soll per Mail an die Adressealgomath1718@
ovgu.de mit Betreff“Algorithmische Mathematik Programmierprojekt” gesendet werden.
Kommentare in der E-Mail sowie in Textdateien außerhalb des Codes sind nicht notwendig und werden nicht gewertet.
• Der Code muss so formatiert und kommentiert sein, dass die Kontrolleure in der Lage sind, den Code zu verstehen.
• Voraussichtlich am 26.06 an beiden ¨Ubungsterminen (11.15-12.45 und 15.15-16.45) wird die Abnahme des Projektes erfolgen. Dabei soll jede Gruppe innerhalb einer halben Stunde in der Lage sein, Ihr Programm zu erkl¨aren.