70 lines
3.2 KiB
Markdown
70 lines
3.2 KiB
Markdown
# Vollgeladen
|
|
|
|
## Lösungsidee
|
|
|
|
Da die niedrigste Bewertung möglichst hoch sein soll, sollte zuerst versucht
|
|
eine Route mit einer Mindestbewertung von 5.0 zu bilden. Scheitert dies wird
|
|
es mit 4.9, 4.8, ..., 0.1 versucht. Das Routenbildung mit einer bestimmten
|
|
Mindestbewertung kann aus zwei Gründen fehlschlagen:
|
|
|
|
- innerhalb der 6 Stunden Fahrzeit gibt es kein Hotel mit der Mindestbewertung
|
|
- an mehr als 4 Hotels muss gehalten werden
|
|
|
|
## Umsetzung
|
|
|
|
Die Lösungsidee wird in C implementiert. Eine Hilfsfunktion der
|
|
"advanced C standard library", die Textdateien ausliest, wird außerdem verwendet.
|
|
Der Quelltext der Library ist im Ordner "lib/advanced_C_standard_library" oder
|
|
[online](https://git.zinkel.org/MrGeorgen/advanced_C_standard_library) erhältlich.
|
|
Das Programm erhält als Argumente eine beliebige Anzahl Dateipfade zu Eingabedateien.
|
|
Mit einer for-Schleife wird über die Dateipfade iteriert. In der Schleife wird die
|
|
Eingabedatei ausgelesen. Die Anzahl der Hotels und die Gesamtfahrzeit werden jeweils
|
|
in einer Variable abgespeichert. Anschließend wird ein Array mit Strukturen, die Hotels
|
|
darstellen, befüllt. In einer do-while-Schleife wird mit einer Bewertung von
|
|
5.0, 4.9, ..., 0.1 versucht eine Route zu bilden.
|
|
Im Programm werden die Bewertungen als Integer dargestellt, wobei die Bewertung der
|
|
Eingabedatei mit 10 multipliziert wird. Die Ausgabe ist wiederum im ursprünglichen
|
|
Format. Wenn dies bei einer Bewertung erfolgreich ist, wird die Schleife beendet.
|
|
In dieser Schleife ist wiederum eine for-Schleife,
|
|
die über die Hotels iteriert, worin das letzte Hotel gespeichert wird, das
|
|
mindestens die angestrebte Bewertung hat.
|
|
Ist das Hotel allerdings mehr als 6 Stunden vom letzten Haltepunkt entfernt,
|
|
muss das letzte Hotel verwendet werden, an dem das Halten möglich ist. Es sei
|
|
denn es gibt kein Hotel mit der entsprechenden Bewertung
|
|
oder es wurde bereits an mehr als drei Hotels gehalten. Dann
|
|
muss mit der nächsten Bewertung fortgefahren werden.
|
|
Nachdem eine Route gefunden wurde, wird diese ausgegeben und eventuell mit der
|
|
nächten Eingabedatei fortgefahren.
|
|
|
|
## Beispiele
|
|
|
|
Ergebnisse für die Beispieldaten:
|
|
|
|
```
|
|
hotels1.txt:
|
|
Entfernung vom Start: 347 Minuten, Bewertung: 2.7
|
|
Entfernung vom Start: 687 Minuten, Bewertung: 4.4
|
|
Entfernung vom Start: 1007 Minuten, Bewertung: 2.8
|
|
Entfernung vom Start: 1360 Minuten, Bewertung: 2.8
|
|
hotels2.txt:
|
|
Entfernung vom Start: 341 Minuten, Bewertung: 2.3
|
|
Entfernung vom Start: 700 Minuten, Bewertung: 3.0
|
|
Entfernung vom Start: 1053 Minuten, Bewertung: 4.8
|
|
Entfernung vom Start: 1380 Minuten, Bewertung: 5.0
|
|
hotels3.txt:
|
|
Entfernung vom Start: 360 Minuten, Bewertung: 1.0
|
|
Entfernung vom Start: 717 Minuten, Bewertung: 0.3
|
|
Entfernung vom Start: 1076 Minuten, Bewertung: 3.8
|
|
Entfernung vom Start: 1433 Minuten, Bewertung: 1.7
|
|
hotels4.txt:
|
|
Entfernung vom Start: 340 Minuten, Bewertung: 4.6
|
|
Entfernung vom Start: 676 Minuten, Bewertung: 4.6
|
|
Entfernung vom Start: 1032 Minuten, Bewertung: 4.9
|
|
Entfernung vom Start: 1316 Minuten, Bewertung: 4.9
|
|
hotels5.txt:
|
|
Entfernung vom Start: 317 Minuten, Bewertung: 5.0
|
|
Entfernung vom Start: 636 Minuten, Bewertung: 5.0
|
|
Entfernung vom Start: 987 Minuten, Bewertung: 5.0
|
|
Entfernung vom Start: 1286 Minuten, Bewertung: 5.0
|
|
```
|