Konrad-Adenauer-Gymnasium Langenfeld
Informatik Grundkurs Q1
Aufgabe 21: Rangierproblem
(aus: Informatik in der gymnasialen Oberstufe: B.2 Formen linearer
Organisation von Daten, Soest 1989)
Vorgegeben ist ein Güterbahnhof mit folgendem Gleisbild. Auf Gleis A stehen
nummerierte Waggons, die so rangiert werden sollen, dass sie anschließend
sortiert auf Gleis C stehen. Folgende Vorgaben müssen beachtet werden:
- Die Lok kann immer nur einen Wagen ziehen.
- Man hat zwei Helfer: einen an der Spitze der Waggons in A (H1) und einen
in C (H2).
- Gleis B kann als Abstellgleis benutzt werden.
Lösung von Hand:
Für die oben abgebildete Situation kann die folgende Strategie verwendet
werden:
Hole Waggon (14) aus A und bringe ihn nach C .
Hole Waggon (15) aus A und bringe ihn nach C .
Hole Waggon (15) aus C und bringe ihn nach B .
Hole Waggon (14) aus C und bringe ihn nach B .
Hole Waggon (11) aus A und bringe ihn nach C .
Hole Waggon (16) aus A und bringe ihn nach C .
Zugbeobachter aus A nach B .
Hole Waggon (16) aus C und bringe ihn nach A.
Hole Waggon (14) aus B und bringe ihn nach C .
Hole Waggon (15) aus B und bringe ihn nach C .
Zugbeobachter aus B nach A .
Hole Waggon (16) aus A und bringe ihn nach C .
Allgemeine Strategie:
- Waggons werden so lange von A nach C gebracht, wie dies die gewünschte
Ordnung zulässt. Wenn C noch leer ist, passt der erste Waggon aus A immer.
- Wenn der nächste Waggon in A eine kleinere Nummer hat als der vorderste
in C , müssen die "falschen" Waggons aus C in B abgestellt
werden.
- Wenn Gleis A leer ist, werden die Funktionen der Gleise A und B getauscht.
Benötigte Klassen und Methoden:
- Die einzelnen Gleise stellen wir durch Listen dar, die die einzelnen
Waggons als Integer-Zahlen enthalten. Es werden also 3 Listen-Objekte benötigt.
- Das "Verschieben" eines Waggons (z.B. von Gleis A nach Gleis B)
wird durch Löschen des ersten Listenelements von A und Einfügen dieses
Elements an den Anfang der Liste B realisiert.
- Verschoben wird solange, bis eine Liste leer ist, oder bis ein Objekt
(Waggonnummer) am Anfang der Ausgangsliste größer ist als das Objekt der
Zielliste.
- Benötigte Operationen (außer Konstruktor):
- Erstes Listenelement löschen
- Listenelement vorne einfügen
- Auswerten des ersten Listen-Elements
- Test, ob Liste leer
© Ralph-Erich Hildebrandt, 04. Februar 2005