From 4109e6253eaa3f232422175a1ed6ae17b45aa13e Mon Sep 17 00:00:00 2001 From: hummel Date: Tue, 8 Apr 2025 10:46:47 +0200 Subject: [PATCH 1/6] Routenplanung begonnen. --- .../informatik/routenplaner/domain/Routeplaner.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java index 6a18a06..05f196a 100644 --- a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java +++ b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java @@ -15,6 +15,13 @@ public class Routeplaner { public Routeplaner() { loadData(); } + + public String[] planRoute(String start, String destination) { + + return null; + } + + public int getNumberOfCities() { return cities.size(); -- 2.43.0 From ff6d3cc6aece14810324254278595a3d7ce49ff5 Mon Sep 17 00:00:00 2001 From: hummel Date: Tue, 8 Apr 2025 11:04:44 +0200 Subject: [PATCH 2/6] =?UTF-8?q?Erste=20Iteration=20f=C3=BCr=20Routenplanun?= =?UTF-8?q?g=20eingef=C3=BCgt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../informatik/routenplaner/NaviApp.java | 2 ++ .../informatik/routenplaner/domain/City.java | 19 +++++++++++++++++++ .../routenplaner/domain/Routeplaner.java | 19 +++++++++++++++++-- .../routenplaner/domain/Street.java | 2 +- 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/NaviApp.java b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/NaviApp.java index 27a4e51..056c71e 100644 --- a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/NaviApp.java +++ b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/NaviApp.java @@ -8,6 +8,8 @@ public class NaviApp { Routeplaner map = new Routeplaner(); System.out.println(map.getNumberOfCities()); + + map.planRoute("Mannheim", "Trier"); } } diff --git a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/City.java b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/City.java index 7e10cc0..f739409 100644 --- a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/City.java +++ b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/City.java @@ -4,11 +4,14 @@ import java.util.TreeSet; public class City { private String name; + private int distance; + private String predecessor; private TreeSet neighbors = new TreeSet<>(); public City(String name) { this.name = name; + reset(); } public void addConnection(City stadt2, int distance) { @@ -23,4 +26,20 @@ public class City { return neighbors; } + public void checkAndChangeDistance(int distance, String predecessor) { + if (distance < this.distance) { + this.distance = distance; + this.predecessor = predecessor; + } + } + + public int getDistance() { + return distance; + } + + private void reset() { + distance = Integer.MAX_VALUE; + predecessor = null; + } + } \ No newline at end of file diff --git a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java index 05f196a..999bc7b 100644 --- a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java +++ b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java @@ -18,11 +18,26 @@ public class Routeplaner { public String[] planRoute(String start, String destination) { + City sc = cities.get(start); + + if (sc == null || cities.get(destination) == null) + throw new RuntimeException("Stadt nicht gefunden."); + + for (Street s : sc.getNeighbors()) { + System.out.println(s.toString()); + + City nc = s.getDestination(); + nc.checkAndChangeDistance(s.getDistance(), sc.getName()); + + if (nc.getName().equals(destination)) { + System.out.println("Route nach " + destination + " gefunden mit Entfernung: " + nc.getDistance()); + } + + } + return null; } - - public int getNumberOfCities() { return cities.size(); } diff --git a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Street.java b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Street.java index 2a7b3f6..9ba1877 100644 --- a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Street.java +++ b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Street.java @@ -31,7 +31,7 @@ public class Street implements Comparable { return start; } - public City getTarget() { + public City getDestination() { return destination; } -- 2.43.0 From dbeb4418f3d5b6522a032d195a8ce3c3dfdf3c00 Mon Sep 17 00:00:00 2001 From: hummel Date: Tue, 8 Apr 2025 11:38:17 +0200 Subject: [PATCH 3/6] =?UTF-8?q?N=C3=A4chste=20Schritt=20f=C3=BCr=20Routenp?= =?UTF-8?q?lanung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../informatik/routenplaner/NaviApp.java | 2 +- .../informatik/routenplaner/domain/City.java | 18 +++++++ .../routenplaner/domain/Routeplaner.java | 47 +++++++++++++++++-- 3 files changed, 61 insertions(+), 6 deletions(-) diff --git a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/NaviApp.java b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/NaviApp.java index 056c71e..7a9ad93 100644 --- a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/NaviApp.java +++ b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/NaviApp.java @@ -9,7 +9,7 @@ public class NaviApp { System.out.println(map.getNumberOfCities()); - map.planRoute("Mannheim", "Trier"); + map.initializePlanning("Mannheim", "München"); } } diff --git a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/City.java b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/City.java index f739409..9e1e71a 100644 --- a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/City.java +++ b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/City.java @@ -6,6 +6,7 @@ public class City { private String name; private int distance; private String predecessor; + private boolean visited; private TreeSet neighbors = new TreeSet<>(); @@ -37,9 +38,26 @@ public class City { return distance; } + public void setDistance(int distance) { + this.distance = distance; + } + + public boolean isVisited() { + return visited; + } + + public void setVisited() { + visited = true; + } + + public String getPredecessor() { + return predecessor; + } + private void reset() { distance = Integer.MAX_VALUE; predecessor = null; + visited = false; } } \ No newline at end of file diff --git a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java index 999bc7b..822013d 100644 --- a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java +++ b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java @@ -3,6 +3,7 @@ package de.th_mannheim.informatik.routenplaner.domain; import java.io.File; import java.io.IOException; import java.util.HashMap; +import java.util.LinkedList; import java.util.Scanner; import org.jsoup.Jsoup; @@ -16,26 +17,62 @@ public class Routeplaner { loadData(); } - public String[] planRoute(String start, String destination) { + public LinkedList initializePlanning(String start, String destination) { + cities.get(start).setDistance(0); + planRoute(start, destination); + + System.out.println(); + System.out.println(); + System.out.println("Route:"); + System.out.println(); + + LinkedList hops = new LinkedList<>(); + City dc = cities.get(destination); + + while (true) { + hops.add(dc.getName() + " " + dc.getDistance() + " km"); + System.out.println("Stadt: " + dc.getName() + " " + dc.getDistance() + " km"); + + if (dc.getName().equals(start)) + break; + + dc = cities.get(dc.getPredecessor()); + + System.out.println("\tVorher: " + dc.getName()); + } + + return hops; + } + + private void planRoute(String start, String destination) { + System.out.println("Prüfe " + start); City sc = cities.get(start); + sc.setVisited(); if (sc == null || cities.get(destination) == null) throw new RuntimeException("Stadt nicht gefunden."); for (Street s : sc.getNeighbors()) { System.out.println(s.toString()); - + City nc = s.getDestination(); - nc.checkAndChangeDistance(s.getDistance(), sc.getName()); + + if (nc.isVisited()) { + System.out.println("schon besucht"); + continue; + } + + nc.checkAndChangeDistance(sc.getDistance() + s.getDistance(), sc.getName()); if (nc.getName().equals(destination)) { System.out.println("Route nach " + destination + " gefunden mit Entfernung: " + nc.getDistance()); + } else { + planRoute(nc.getName(), destination); } } - - return null; + } public int getNumberOfCities() { -- 2.43.0 From a34d60c0d0170e370c763685c387b8ac13212644 Mon Sep 17 00:00:00 2001 From: hummel Date: Tue, 8 Apr 2025 18:54:20 +0200 Subject: [PATCH 4/6] Used a Deque for "automatic" reordering of calculated route. --- .../th_mannheim/informatik/routenplaner/NaviApp.java | 3 ++- .../informatik/routenplaner/domain/Routeplaner.java | 12 +++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/NaviApp.java b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/NaviApp.java index 7a9ad93..b3a7006 100644 --- a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/NaviApp.java +++ b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/NaviApp.java @@ -9,7 +9,8 @@ public class NaviApp { System.out.println(map.getNumberOfCities()); - map.initializePlanning("Mannheim", "München"); + for (String waypoint : map.initializePlanning("Mannheim", "Wilhelmshaven")) + System.out.println(waypoint); } } diff --git a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java index 822013d..7964d2e 100644 --- a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java +++ b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java @@ -2,8 +2,9 @@ package de.th_mannheim.informatik.routenplaner.domain; import java.io.File; import java.io.IOException; +import java.util.ArrayDeque; +import java.util.Deque; import java.util.HashMap; -import java.util.LinkedList; import java.util.Scanner; import org.jsoup.Jsoup; @@ -17,7 +18,7 @@ public class Routeplaner { loadData(); } - public LinkedList initializePlanning(String start, String destination) { + public Deque initializePlanning(String start, String destination) { cities.get(start).setDistance(0); planRoute(start, destination); @@ -27,19 +28,16 @@ public class Routeplaner { System.out.println("Route:"); System.out.println(); - LinkedList hops = new LinkedList<>(); + Deque hops = new ArrayDeque<>(); City dc = cities.get(destination); while (true) { - hops.add(dc.getName() + " " + dc.getDistance() + " km"); - System.out.println("Stadt: " + dc.getName() + " " + dc.getDistance() + " km"); + hops.push(dc.getName() + " " + dc.getDistance() + " km"); if (dc.getName().equals(start)) break; dc = cities.get(dc.getPredecessor()); - - System.out.println("\tVorher: " + dc.getName()); } return hops; -- 2.43.0 From 225d4bddfed67b8d5bc1c71fb131742b06684f2d Mon Sep 17 00:00:00 2001 From: hummel Date: Tue, 8 Apr 2025 20:11:25 +0200 Subject: [PATCH 5/6] Problem mit den zu langen Routen gefixt. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wir müssen die Straßen als genutzt markieren, nicht die Städte. --- .../informatik/routenplaner/NaviApp.java | 2 + .../informatik/routenplaner/domain/City.java | 11 +--- .../routenplaner/domain/Routeplaner.java | 50 ++++++++++--------- .../routenplaner/domain/Street.java | 9 ++++ 4 files changed, 38 insertions(+), 34 deletions(-) diff --git a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/NaviApp.java b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/NaviApp.java index b3a7006..faee3f8 100644 --- a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/NaviApp.java +++ b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/NaviApp.java @@ -7,7 +7,9 @@ public class NaviApp { public static void main(String[] args) { Routeplaner map = new Routeplaner(); + System.out.println(); System.out.println(map.getNumberOfCities()); + System.out.println(); for (String waypoint : map.initializePlanning("Mannheim", "Wilhelmshaven")) System.out.println(waypoint); diff --git a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/City.java b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/City.java index 9e1e71a..261ffd5 100644 --- a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/City.java +++ b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/City.java @@ -6,7 +6,6 @@ public class City { private String name; private int distance; private String predecessor; - private boolean visited; private TreeSet neighbors = new TreeSet<>(); @@ -31,6 +30,7 @@ public class City { if (distance < this.distance) { this.distance = distance; this.predecessor = predecessor; + System.out.println(name + " " + distance + " <- " + predecessor); } } @@ -42,14 +42,6 @@ public class City { this.distance = distance; } - public boolean isVisited() { - return visited; - } - - public void setVisited() { - visited = true; - } - public String getPredecessor() { return predecessor; } @@ -57,7 +49,6 @@ public class City { private void reset() { distance = Integer.MAX_VALUE; predecessor = null; - visited = false; } } \ No newline at end of file diff --git a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java index 7964d2e..24e4a98 100644 --- a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java +++ b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Routeplaner.java @@ -20,9 +20,9 @@ public class Routeplaner { public Deque initializePlanning(String start, String destination) { cities.get(start).setDistance(0); - + planRoute(start, destination); - + System.out.println(); System.out.println(); System.out.println("Route:"); @@ -30,49 +30,50 @@ public class Routeplaner { Deque hops = new ArrayDeque<>(); City dc = cities.get(destination); - + while (true) { hops.push(dc.getName() + " " + dc.getDistance() + " km"); - + if (dc.getName().equals(start)) break; - + dc = cities.get(dc.getPredecessor()); } - + return hops; } - + private void planRoute(String start, String destination) { System.out.println("Prüfe " + start); City sc = cities.get(start); - sc.setVisited(); - + if (sc == null || cities.get(destination) == null) throw new RuntimeException("Stadt nicht gefunden."); - + for (Street s : sc.getNeighbors()) { + if (s.isUsed()) + continue; + + s.setUsed(); + System.out.println(s.toString()); City nc = s.getDestination(); - - if (nc.isVisited()) { - System.out.println("schon besucht"); - continue; - } - + nc.checkAndChangeDistance(sc.getDistance() + s.getDistance(), sc.getName()); - + if (nc.getName().equals(destination)) { System.out.println("Route nach " + destination + " gefunden mit Entfernung: " + nc.getDistance()); } else { + System.out.println(); planRoute(nc.getName(), destination); + System.out.println(); } - + } - + } - + public int getNumberOfCities() { return cities.size(); } @@ -124,7 +125,7 @@ public class Routeplaner { } } - + private void loadConnections(int[][] matrix, HashMap cityLookup) throws IOException { final Scanner sc = new Scanner(new File("Routenplaner/resources/verb.txt")); @@ -142,10 +143,11 @@ public class Routeplaner { continue; } + System.out.println(start + " " + line + " " + matrix[cityLookup.get(start)][cityLookup.get(line)]); this.addStreet(start, line, matrix[cityLookup.get(start)][cityLookup.get(line)]); } // while - + sc.close(); } @@ -159,7 +161,7 @@ public class Routeplaner { } return cityNames; } - + private void addCity(String name) { cities.put(name, new City(name)); } @@ -171,5 +173,5 @@ public class Routeplaner { s1.addConnection(s2, distance); s2.addConnection(s1, distance); } - + } diff --git a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Street.java b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Street.java index 9ba1877..ee300b8 100644 --- a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Street.java +++ b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Street.java @@ -5,6 +5,8 @@ public class Street implements Comparable { private final City destination; private final int distance; + private boolean used; + public Street(City start, City destination, int distance) { super(); @@ -39,6 +41,13 @@ public class Street implements Comparable { return distance; } + public boolean isUsed() { + return used; + } + + public void setUsed() { + used = true; + } public String toString() { return start.getName() + " -> " + destination.getName() + ": " + distance + " km"; } -- 2.43.0 From ec3564e0ea59be56c102fc8d48b2cd29a5b98945 Mon Sep 17 00:00:00 2001 From: hummel Date: Fri, 11 Apr 2025 12:40:42 +0200 Subject: [PATCH 6/6] Fix this version. --- .../de/th_mannheim/informatik/routenplaner/domain/City.java | 4 ++++ .../th_mannheim/informatik/routenplaner/domain/Street.java | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/City.java b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/City.java index 261ffd5..cece60e 100644 --- a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/City.java +++ b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/City.java @@ -31,6 +31,10 @@ public class City { this.distance = distance; this.predecessor = predecessor; System.out.println(name + " " + distance + " <- " + predecessor); + + for (Street s : neighbors) { + s.setUnused(); + } } } diff --git a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Street.java b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Street.java index ee300b8..a9142ec 100644 --- a/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Street.java +++ b/Routenplaner/src/de/th_mannheim/informatik/routenplaner/domain/Street.java @@ -48,6 +48,11 @@ public class Street implements Comparable { public void setUsed() { used = true; } + + public void setUnused() { + used = false; + } + public String toString() { return start.getName() + " -> " + destination.getName() + ": " + distance + " km"; } -- 2.43.0