Übungen zu Algorithmen und |
8. Übung - abzugeben am 1. 12. 1998 in Ihrer Übungsgruppe
MODULE Graph; TYPE ValueT* =LONGINT; (*Bewertungs-Typ*) NodeNoT*=LONGINT; (*Knotennummer-Typ*) GraphT* =RECORD a (*Adjazenzmatrix*), w (*Wegematrix*), m (*Orientierungsmatrix für Bsp. c*): POINTER TO ARRAY OF ARRAY OF LONGINT; ............... END; (*RECORD*) PROCEDURE (VAR g:GraphT) Init*(v:INTEGER); (* v=Anzahl der Knoten im Graphen *) PROCEDURE (VAR g:GraphT) CleanUp*(); (* Freigabe des Graphens = Freigabe des dynamisch allokierten Speicherplatzes *) PROCEDURE (VAR g:GraphT) SetEdge*(x,y:NodeNoT; value:ValueT); (* Kante x,y mit Bewertung value in den gerichteten Graphen aufnehmen *) PROCEDURE (VAR g:GraphT) PrintAdj*(); (* Ausgabe der Adjazenzmatrix der Kantenbewertungen. *) PROCEDURE (VAR g:GraphT) Warshall*(); (* Anwenden des Alg. von Warshall auf den gewichteten, gerichteten Graphen g. *) PROCEDURE (VAR g:GraphT) PrintWays*(); (* Ausgabe der Wegematrix - kürzeste Weglängen für alle Wege von i nach j. *) END Graph;
PROCEDURE (VAR g:GraphT) PrintOrientation*(); (* Ausgabe der Orientierungsmatrix - gibt für jeden kürzesten Weg [x,y] an, welches der erste Zwischenknoten am Weg von x nach y ist. *) PROCEDURE (VAR g:GraphT) PrintWay*(x,y:NodeNoT); (* Druckt den kürzesten Weg von x nach y. Muß folgendes anzeigen: Gibt es einen Weg? Wenn ja, welche Knoten werden dabei besucht und wie lange ist er? *)
Anmerkungen zu b und c: