Aktueller Stand
(Leider für den Moment kein MVN-Projekt, daher bitte die JAR-Datei manuell zum Buildpath hinzufügen.)main
parent
d7139efdf5
commit
99e051580c
|
@ -0,0 +1 @@
|
|||
/org.eclipse.jdt.core.prefs
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,214 @@
|
|||
Aachen
|
||||
Köln
|
||||
Trier
|
||||
|
||||
Augsburg
|
||||
München
|
||||
Garmisch-Part.
|
||||
Nürnberg
|
||||
Ulm
|
||||
Regensburg
|
||||
Lindau
|
||||
|
||||
Bayreuth
|
||||
Nürnberg
|
||||
Würzburg
|
||||
Erfurt
|
||||
|
||||
Berlin
|
||||
Cottbus
|
||||
Leipzig
|
||||
Frankfurt/Oder
|
||||
Magdeburg
|
||||
Schwerin
|
||||
Rostock
|
||||
Magdeburg
|
||||
Neubrandenburg
|
||||
|
||||
Bremen
|
||||
Hamburg
|
||||
Hannover
|
||||
Osnabrück
|
||||
|
||||
Cottbus
|
||||
Dresden
|
||||
Frankfurt/Oder
|
||||
Berlin
|
||||
|
||||
Dresden
|
||||
Cottbus
|
||||
Erfurt
|
||||
Bayreuth
|
||||
|
||||
Erfurt
|
||||
Magdeburg
|
||||
Fulda
|
||||
Bayreuth
|
||||
Kassel
|
||||
|
||||
Essen
|
||||
Köln
|
||||
Münster
|
||||
Kassel
|
||||
|
||||
Frankfurt/Main
|
||||
Mannheim
|
||||
Würzburg
|
||||
Koblenz
|
||||
Fulda
|
||||
Kassel
|
||||
|
||||
Frankfurt/Oder
|
||||
Dresden
|
||||
Berlin
|
||||
|
||||
Freiburg
|
||||
Karlsruhe
|
||||
Stuttgart
|
||||
Lindau
|
||||
|
||||
Fulda
|
||||
Kassel
|
||||
Erfurt
|
||||
Würzburg
|
||||
|
||||
Garmisch-Part.
|
||||
München
|
||||
Lindau
|
||||
Ulm
|
||||
|
||||
Hamburg
|
||||
Kiel
|
||||
Bremen
|
||||
Magdeburg
|
||||
|
||||
Hannover
|
||||
Osnabrück
|
||||
Bremen
|
||||
Hamburg
|
||||
Magdeburg
|
||||
|
||||
Karlsruhe
|
||||
Stuttgart
|
||||
Mannheim
|
||||
Saarbrücken
|
||||
|
||||
Kassel
|
||||
Frankfurt/Main
|
||||
Essen
|
||||
Fulda
|
||||
Erfurt
|
||||
|
||||
Kiel
|
||||
Hamburg
|
||||
Schwerin
|
||||
|
||||
Koblenz
|
||||
Köln
|
||||
Trier
|
||||
Frankfurt/Main
|
||||
Fulda
|
||||
Kassel
|
||||
|
||||
Köln
|
||||
Koblenz
|
||||
Trier
|
||||
|
||||
Leipzig
|
||||
Berlin
|
||||
Erfurt
|
||||
Magdeburg
|
||||
|
||||
Lindau
|
||||
Ulm
|
||||
Garmisch-Part.
|
||||
|
||||
Magdeburg
|
||||
Hannover
|
||||
Berlin
|
||||
Schwerin
|
||||
Hamburg
|
||||
|
||||
Mannheim
|
||||
Karlsruhe
|
||||
Frankfurt/Main
|
||||
Saarbrücken
|
||||
Trier
|
||||
Koblenz
|
||||
|
||||
München
|
||||
Augsburg
|
||||
Lindau
|
||||
Bayreuth
|
||||
Würzburg
|
||||
Passau
|
||||
|
||||
Münster
|
||||
Osnabrück
|
||||
Essen
|
||||
|
||||
Neubrandenburg
|
||||
Berlin
|
||||
Rostock
|
||||
Schwerin
|
||||
|
||||
Nürnberg
|
||||
München
|
||||
Würzburg
|
||||
Bayreuth
|
||||
Stuttgart
|
||||
|
||||
Osnabrück
|
||||
Hannover
|
||||
Kassel
|
||||
Münster
|
||||
Bremen
|
||||
Wilhelmshaven
|
||||
|
||||
Passau
|
||||
Regensburg
|
||||
München
|
||||
|
||||
Regensburg
|
||||
Nürnberg
|
||||
München
|
||||
Passau
|
||||
|
||||
Rostock
|
||||
Schwerin
|
||||
Neubrandenburg
|
||||
|
||||
Saarbrücken
|
||||
Trier
|
||||
Mannheim
|
||||
Frankfurt/Main
|
||||
Karlsruhe
|
||||
|
||||
Schwerin
|
||||
Rostock
|
||||
Hamburg
|
||||
Berlin
|
||||
|
||||
Stuttgart
|
||||
Karlsruhe
|
||||
Ulm
|
||||
Würzburg
|
||||
|
||||
Trier
|
||||
Saarbrücken
|
||||
Koblenz
|
||||
|
||||
Ulm
|
||||
Stuttgart
|
||||
Augsburg
|
||||
Lindau
|
||||
Nürnberg
|
||||
Würzburg
|
||||
|
||||
Wilhelmshaven
|
||||
Bremen
|
||||
Osnabrück
|
||||
|
||||
Würzburg
|
||||
Osnabrück
|
||||
Bremen
|
|
@ -0,0 +1,14 @@
|
|||
package de.hsma.informatik.maNav;
|
||||
|
||||
import de.hsma.informatik.maNav.domain.planer.Routenplaner;
|
||||
|
||||
public class NaviApp {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
Routenplaner karte = new Routenplaner();
|
||||
karte.printRoute("Mannheim", "München");
|
||||
|
||||
} // main
|
||||
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package de.hsma.informatik.maNav.domain.graph;
|
||||
|
||||
import java.util.TreeSet;
|
||||
|
||||
public class Stadt {
|
||||
private String name;
|
||||
|
||||
private TreeSet<Verbindung> nachbarn = new TreeSet<>();
|
||||
|
||||
public Stadt(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public void addVerbindung(Stadt stadt2, int entfernung) {
|
||||
nachbarn.add(new Verbindung(this, stadt2, entfernung));
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public TreeSet<Verbindung> getNachbarn() {
|
||||
return nachbarn;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
package de.hsma.informatik.maNav.domain.graph;
|
||||
|
||||
public class Verbindung implements Comparable<Verbindung> {
|
||||
private final Stadt start;
|
||||
private final Stadt ziel;
|
||||
|
||||
private final int entfernung;
|
||||
|
||||
public Verbindung(Stadt start, Stadt ziel, int entfernung) {
|
||||
super();
|
||||
this.start = start;
|
||||
this.ziel = ziel;
|
||||
this.entfernung = entfernung;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Verbindung v) {
|
||||
int diff = this.entfernung - v.entfernung;
|
||||
|
||||
if (diff != 0)
|
||||
return diff;
|
||||
|
||||
if (this.start.equals(v.start) && this.ziel.equals(v.ziel))
|
||||
return 0;
|
||||
|
||||
// wg. Nutzung von TreeSet
|
||||
return 1;
|
||||
}
|
||||
|
||||
public Stadt getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
public Stadt getZiel() {
|
||||
return ziel;
|
||||
}
|
||||
|
||||
public int getEntfernung() {
|
||||
return entfernung;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return start.getName() + " -> " + ziel.getName() + ": " + entfernung + " km";
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
package de.hsma.informatik.maNav.domain.planer;
|
||||
|
||||
import java.util.TreeSet;
|
||||
|
||||
import de.hsma.informatik.maNav.domain.graph.Stadt;
|
||||
import de.hsma.informatik.maNav.domain.graph.Verbindung;
|
||||
|
||||
public class PlanerStadt implements Comparable<PlanerStadt> {
|
||||
private int entfernung = Integer.MAX_VALUE;
|
||||
|
||||
private Stadt stadt;
|
||||
private PlanerStadt vorgänger = null;
|
||||
private TreeSet<Verbindung> nachbarn;
|
||||
|
||||
public PlanerStadt(Stadt stadt) {
|
||||
this.stadt = stadt;
|
||||
nachbarn = (TreeSet<Verbindung>)stadt.getNachbarn().clone();
|
||||
}
|
||||
|
||||
public Verbindung getAndRemoveNächstenNachbarn() {
|
||||
return nachbarn.pollFirst();
|
||||
}
|
||||
|
||||
public boolean setEntfernung(int entfernung, PlanerStadt vorgänger) {
|
||||
if (entfernung < this.entfernung) {
|
||||
this.entfernung = entfernung;
|
||||
this.vorgänger = vorgänger;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(PlanerStadt gs) {
|
||||
int diff = this.entfernung - gs.entfernung;
|
||||
|
||||
if (diff != 0)
|
||||
return diff;
|
||||
|
||||
if (this.stadt.getName().equals(gs.stadt.getName()))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
public int getEntfernung() {
|
||||
return entfernung;
|
||||
}
|
||||
|
||||
public void setEntfernung(int entfernung) {
|
||||
this.entfernung = entfernung;
|
||||
}
|
||||
|
||||
public Stadt getStadt() {
|
||||
return stadt;
|
||||
}
|
||||
|
||||
public PlanerStadt getVorgänger() {
|
||||
return vorgänger;
|
||||
}
|
||||
|
||||
public void setVorgänger(PlanerStadt vorgänger) {
|
||||
this.vorgänger = vorgänger;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return stadt.getName();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,149 @@
|
|||
package de.hsma.informatik.maNav.domain.planer;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Scanner;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import org.jsoup.Jsoup;
|
||||
import org.jsoup.nodes.Document;
|
||||
import org.jsoup.select.Elements;
|
||||
|
||||
import de.hsma.informatik.maNav.domain.graph.Stadt;
|
||||
import de.hsma.informatik.maNav.domain.graph.Verbindung;
|
||||
|
||||
public class Routenplaner {
|
||||
private HashMap<String, Stadt> städte = new HashMap<>();
|
||||
|
||||
public Routenplaner() {
|
||||
loadData();
|
||||
}
|
||||
|
||||
public void printRoute(String start, String dest) {
|
||||
TreeSet<PlanerStadt> kandidaten = new TreeSet<>();
|
||||
|
||||
PlanerStadt dsst = new PlanerStadt(städte.get(start));
|
||||
dsst.setEntfernung(0);
|
||||
kandidaten.add(dsst);
|
||||
|
||||
do {
|
||||
Verbindung nächste = dsst.getAndRemoveNächstenNachbarn();
|
||||
|
||||
if (nächste != null) {
|
||||
PlanerStadt dzst = new PlanerStadt(nächste.getZiel());
|
||||
if (dzst.setEntfernung(dsst.getEntfernung() + nächste.getEntfernung(), dsst)) {
|
||||
System.out.println(nächste.toString() + " (" + (dsst.getEntfernung() + nächste.getEntfernung()) +")");
|
||||
|
||||
kandidaten.add(dzst);
|
||||
}
|
||||
} else {
|
||||
System.out.println("erledigt: " + kandidaten.pollFirst());
|
||||
}
|
||||
|
||||
dsst = kandidaten.first();
|
||||
} while(!dsst.getStadt().getName().equals(dest));
|
||||
|
||||
System.out.println();
|
||||
System.out.println(dsst.getStadt().getName() + " " + dsst.getEntfernung());
|
||||
|
||||
while (dsst.getVorgänger() != null) {
|
||||
System.out.println(dsst.getVorgänger().getStadt().getName() + " " + dsst.getVorgänger().getEntfernung());
|
||||
dsst = dsst.getVorgänger();
|
||||
}
|
||||
}
|
||||
|
||||
private void loadData() {
|
||||
final String CITIES_DOCUMENT_PATH = "resources/etab.html";
|
||||
|
||||
int[][] matrix;
|
||||
HashMap<String, Integer> cityLookup = new HashMap<>();
|
||||
|
||||
File input = new File(CITIES_DOCUMENT_PATH);
|
||||
Document doc;
|
||||
try {
|
||||
doc = Jsoup.parse(input, "UTF-8");
|
||||
|
||||
String[] cities = parseCities(doc);
|
||||
matrix = new int[cities.length][cities.length];
|
||||
|
||||
Elements cells = doc.select("td");
|
||||
int xIndex = 0;
|
||||
int yIndex = -1;
|
||||
|
||||
for (int i = cities.length + 1; i < cells.size(); i++) {
|
||||
if(i%(cities.length + 1) == 0) {
|
||||
xIndex = 0;
|
||||
yIndex++;
|
||||
|
||||
this.addCity(cities[yIndex]);
|
||||
cityLookup.put(cities[yIndex], yIndex);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
String cityName1 = cities[xIndex];
|
||||
String cityName2 = cities[yIndex];
|
||||
|
||||
xIndex++;
|
||||
|
||||
if(cityName1.equals(cityName2))
|
||||
continue;
|
||||
|
||||
matrix[xIndex - 1][yIndex] = Integer.parseInt(cells.get(i).text());
|
||||
} // for
|
||||
|
||||
loadConnections(matrix, cityLookup);
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void loadConnections(int[][] matrix, HashMap<String, Integer> cityLookup) throws IOException {
|
||||
final Scanner sc = new Scanner(new File("resources/verb.txt"));
|
||||
|
||||
String start = null;
|
||||
while (sc.hasNextLine()) {
|
||||
String zeile = sc.nextLine();
|
||||
|
||||
if (start == null) {
|
||||
start = zeile;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (zeile.isBlank()) {
|
||||
start = null;
|
||||
continue;
|
||||
}
|
||||
|
||||
this.addConnection(start, zeile, matrix[cityLookup.get(start)][cityLookup.get(zeile)]);
|
||||
|
||||
} // while
|
||||
}
|
||||
|
||||
private String[] parseCities(Document doc) {
|
||||
Elements cities = doc.select("td > b");
|
||||
int cityAmount = cities.size();
|
||||
String[] cityNames = new String[cityAmount];
|
||||
|
||||
for (int i = 0; i < cities.size(); i++) {
|
||||
cityNames[i] = cities.get(i).text();
|
||||
}
|
||||
return cityNames;
|
||||
}
|
||||
|
||||
private void addCity(String name) {
|
||||
städte.put(name, new Stadt(name));
|
||||
}
|
||||
|
||||
private void addConnection(String name1, String name2, int entfernung) {
|
||||
Stadt s1 = städte.get(name1);
|
||||
Stadt s2 = städte.get(name2);
|
||||
|
||||
s1.addVerbindung(s2, entfernung);
|
||||
s2.addVerbindung(s1, entfernung);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue