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