Hallo zusammen,
ich würde gerne eine Art Routenplaner implementieren, der mir eine Zugroute zwischen einer Start- und Zielstation ausgibt.
Dafür habe ich zwei Arten von Objekten:
- Bahnhöhe (TrainStation)
- Verbindungen (Connections)
Die Bahnhöfe besitzen einem Namen. Die Verbindungen beinhalten den Start- und Zielbahnhof und die Start- sowie Ankunftszeit.
Alle verfügbaren Verbindungen und Bahnhöfe sind in zwei Listen (connections und
trainStations) gespeichert.
Der Routine übergebe ich eine beliebige Verbindung ("strecke")und sie soll nun eine Liste aus einzelnen Verbindungen ausgeben, die zeitlich passend und möglichst optimal die von mir eingegebene Verbindung mit den verfügbaren Verbindungen als Fahrplan modelliert. Dies soll als Greedy-Algo. realisiert werden:
- Finde die früheste Direktverbindung zwischen Abfahrt-/Zielbahnhof -> falls eine existiert, füge sie zur Liste und ende.
- falls keine existiert: neue Suche ausgehend von jedem erreichbaren Zwischenbahnhof; Die Verbindungen sollen dabei priorisiert werden nach dem Abfahrtsbahnhof, dem Zielbahnhof, der Abfahrtszeit und der Ankunftszeit.
Die Idee hinter dem Algorithmus habe ich verstanden, aber bei mir scheitert es an der Implementierung.
Meine Idee ist folgende:
Ich fange so an, dass ich zuerst nur die Verbindungen anschaue, die der Startbahnhof unterstützt ("guteVerbindungen"). Wenn in dieser Liste die Verbindung strecke existiert, so kann ich direkt diese Verbindung als route ausgeben, da das ja genau die gesuchte ist. Wenn nicht, muss ich mit den anderen Nachbarbahnhöfen weitermachen. Hier komme ich aber nicht weiter. Und wie ich die Priorisierung von mehreren Verbindungen einbauen kann, weiß ich leider auch nicht.
Könnte mir jemand eine Hilfestellung geben?
ich würde gerne eine Art Routenplaner implementieren, der mir eine Zugroute zwischen einer Start- und Zielstation ausgibt.
Dafür habe ich zwei Arten von Objekten:
- Bahnhöhe (TrainStation)
- Verbindungen (Connections)
Die Bahnhöfe besitzen einem Namen. Die Verbindungen beinhalten den Start- und Zielbahnhof und die Start- sowie Ankunftszeit.
Alle verfügbaren Verbindungen und Bahnhöfe sind in zwei Listen (connections und
trainStations) gespeichert.
Der Routine übergebe ich eine beliebige Verbindung ("strecke")und sie soll nun eine Liste aus einzelnen Verbindungen ausgeben, die zeitlich passend und möglichst optimal die von mir eingegebene Verbindung mit den verfügbaren Verbindungen als Fahrplan modelliert. Dies soll als Greedy-Algo. realisiert werden:
- Finde die früheste Direktverbindung zwischen Abfahrt-/Zielbahnhof -> falls eine existiert, füge sie zur Liste und ende.
- falls keine existiert: neue Suche ausgehend von jedem erreichbaren Zwischenbahnhof; Die Verbindungen sollen dabei priorisiert werden nach dem Abfahrtsbahnhof, dem Zielbahnhof, der Abfahrtszeit und der Ankunftszeit.
Die Idee hinter dem Algorithmus habe ich verstanden, aber bei mir scheitert es an der Implementierung.
Meine Idee ist folgende:
Code:
List<Connection> route = new ArrayList<Connection>();
List<Connection> guteVerbindungen = new ArrayList<Connection>();
for (Connection c : connections) {
if (strecke.getDepartingStation().equals(c.getDepartingStation())) {
guteVerbindungen.add(c);
}
}
if (guteVerbindungen.contains(strecke)){
route.add(compositeConnection);
return route;
} else{
//...
}
Ich fange so an, dass ich zuerst nur die Verbindungen anschaue, die der Startbahnhof unterstützt ("guteVerbindungen"). Wenn in dieser Liste die Verbindung strecke existiert, so kann ich direkt diese Verbindung als route ausgeben, da das ja genau die gesuchte ist. Wenn nicht, muss ich mit den anderen Nachbarbahnhöfen weitermachen. Hier komme ich aber nicht weiter. Und wie ich die Priorisierung von mehreren Verbindungen einbauen kann, weiß ich leider auch nicht.
Könnte mir jemand eine Hilfestellung geben?