Adding AStar Algorithm
This commit is contained in:
parent
26bd4bbb3a
commit
58ed89d78c
51
.idea/workspace.xml
generated
51
.idea/workspace.xml
generated
@ -4,7 +4,16 @@
|
|||||||
<option name="autoReloadType" value="SELECTIVE" />
|
<option name="autoReloadType" value="SELECTIVE" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="70f8ea87-9ffc-471a-8059-ebbfc323adcc" name="Changes" comment="Stable Version 3.0" />
|
<list default="true" id="70f8ea87-9ffc-471a-8059-ebbfc323adcc" name="Changes" comment="Adding AStar Algorithm">
|
||||||
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/graph/DirectedGraph.java" beforeDir="false" afterPath="$PROJECT_DIR$/graph/DirectedGraph.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/graph/Graph.java" beforeDir="false" afterPath="$PROJECT_DIR$/graph/Graph.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/graph/UndirectedGraph.java" beforeDir="false" afterPath="$PROJECT_DIR$/graph/UndirectedGraph.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/out/production/ProjektGraph/OurApplication/OurAlgorithm.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/ProjektGraph/OurApplication/OurAlgorithm.class" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/out/production/ProjektGraph/graph/DirectedGraph.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/ProjektGraph/graph/DirectedGraph.class" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/out/production/ProjektGraph/graph/Graph.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/ProjektGraph/graph/Graph.class" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/out/production/ProjektGraph/graph/UndirectedGraph.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/ProjektGraph/graph/UndirectedGraph.class" afterDir="false" />
|
||||||
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
@ -12,6 +21,7 @@
|
|||||||
</component>
|
</component>
|
||||||
<component name="Git.Settings">
|
<component name="Git.Settings">
|
||||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||||
|
<option name="RESET_MODE" value="HARD" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectColorInfo">{
|
<component name="ProjectColorInfo">{
|
||||||
"associatedIndex": 2
|
"associatedIndex": 2
|
||||||
@ -22,16 +32,16 @@
|
|||||||
<option name="hideEmptyMiddlePackages" value="true" />
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
<option name="showLibraryContents" value="true" />
|
<option name="showLibraryContents" value="true" />
|
||||||
</component>
|
</component>
|
||||||
<component name="PropertiesComponent">{
|
<component name="PropertiesComponent"><![CDATA[{
|
||||||
"keyToString": {
|
"keyToString": {
|
||||||
"Application.Display.executor": "Run",
|
"Application.Display.executor": "Run",
|
||||||
"Application.OurApplication.executor": "Run",
|
"Application.OurApplication.executor": "Run",
|
||||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||||
"git-widget-placeholder": "Versuch__Christian",
|
"git-widget-placeholder": "main",
|
||||||
"kotlin-language-version-configured": "true",
|
"kotlin-language-version-configured": "true",
|
||||||
"last_opened_file_path": "C:/Git/ProjektGraphMain"
|
"last_opened_file_path": "C:/Git/ProjektGraphMain"
|
||||||
}
|
}
|
||||||
}</component>
|
}]]></component>
|
||||||
<component name="RecentsManager">
|
<component name="RecentsManager">
|
||||||
<key name="CopyFile.RECENT_KEYS">
|
<key name="CopyFile.RECENT_KEYS">
|
||||||
<recent name="C:\Git\ProjektGraph" />
|
<recent name="C:\Git\ProjektGraph" />
|
||||||
@ -58,7 +68,23 @@
|
|||||||
<option name="project" value="LOCAL" />
|
<option name="project" value="LOCAL" />
|
||||||
<updated>1720028543313</updated>
|
<updated>1720028543313</updated>
|
||||||
</task>
|
</task>
|
||||||
<option name="localTasksCounter" value="2" />
|
<task id="LOCAL-00002" summary="Adding AStar Algorithm">
|
||||||
|
<option name="closed" value="true" />
|
||||||
|
<created>1720036191925</created>
|
||||||
|
<option name="number" value="00002" />
|
||||||
|
<option name="presentableId" value="LOCAL-00002" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1720036191926</updated>
|
||||||
|
</task>
|
||||||
|
<task id="LOCAL-00003" summary="Adding AStar Algorithm">
|
||||||
|
<option name="closed" value="true" />
|
||||||
|
<created>1720036227325</created>
|
||||||
|
<option name="number" value="00003" />
|
||||||
|
<option name="presentableId" value="LOCAL-00003" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1720036227325</updated>
|
||||||
|
</task>
|
||||||
|
<option name="localTasksCounter" value="4" />
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="Vcs.Log.Tabs.Properties">
|
<component name="Vcs.Log.Tabs.Properties">
|
||||||
@ -74,6 +100,7 @@
|
|||||||
</component>
|
</component>
|
||||||
<component name="VcsManagerConfiguration">
|
<component name="VcsManagerConfiguration">
|
||||||
<MESSAGE value="Stable Version 3.0" />
|
<MESSAGE value="Stable Version 3.0" />
|
||||||
<option name="LAST_COMMIT_MESSAGE" value="Stable Version 3.0" />
|
<MESSAGE value="Adding AStar Algorithm" />
|
||||||
|
<option name="LAST_COMMIT_MESSAGE" value="Adding AStar Algorithm" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
@ -257,6 +257,86 @@ public class DirectedGraph<T extends VertexMarking, U extends EdgeMarking> exten
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
System.out.println("Done");
|
||||||
|
// Gibt Distanz zu gefragtem Knoten zurück
|
||||||
|
return distance.get(n2);
|
||||||
|
}
|
||||||
|
public int getShortestPathAStar(MarkedVertex<T> n1, MarkedVertex<T> n2) {
|
||||||
|
|
||||||
|
// Erstellt Hashmap um Distanz von Startnoten zu jedem Knoten auf dem Graph zu tracken
|
||||||
|
// Erstellt Hashmap um zu tracken welche Knoten schon besucht wurden
|
||||||
|
// Initialisierung aller Distanzen auf UNENDLICH (= -1)
|
||||||
|
// Initialisierung, dass kein Knoten besucht wurde
|
||||||
|
HashMap<MarkedVertex<T>, Integer> distance = new HashMap<>();
|
||||||
|
HashMap<MarkedVertex<T>, Boolean> visited = new HashMap<>();
|
||||||
|
for (MarkedVertex<T> i: this.getAllVertexes()) {
|
||||||
|
distance.put(i, -1);
|
||||||
|
visited.put(i, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Erstelle Schlange wo die nächsten Verbindungen drin sind
|
||||||
|
PriorityQueue<WrapperElement<T>> queue = new PriorityQueue<>(new WrapperComparator<T>());
|
||||||
|
|
||||||
|
// Distanz zu Startknoten auf 0
|
||||||
|
// Weg zu Startknoten in die Schlange aufnehmen
|
||||||
|
distance.put(n1, 0);
|
||||||
|
queue.add(new WrapperElement<>(n1, 0));
|
||||||
|
|
||||||
|
// Variable, die Distanz zwischen aktuellem Knoten und Nachfolger speichert
|
||||||
|
int dist = 0;
|
||||||
|
// Variable, die Distanz zwischen dem potenziell nächsten Knoten und dem Zielknoten speichert
|
||||||
|
int airDist = 0;
|
||||||
|
// Zähler für LogList
|
||||||
|
int step = 0;
|
||||||
|
visualizationElements.Graph display;
|
||||||
|
|
||||||
|
while (!queue.isEmpty()) {
|
||||||
|
// Den nächsten Knoten, der am wenigsten kostet, besuchen
|
||||||
|
WrapperElement<T> nextVertex = queue.poll();
|
||||||
|
|
||||||
|
// Knoten als besucht makieren
|
||||||
|
visited.put(nextVertex.getElement(), true);
|
||||||
|
|
||||||
|
|
||||||
|
// Logging
|
||||||
|
System.out.println("Visit " + nextVertex.getElement().getName());
|
||||||
|
this.logList.add(new OurLogElement(step, "Step: " + step, 0, nextVertex.getElement().getScreenVertex()));
|
||||||
|
|
||||||
|
|
||||||
|
// Gehe von diesem Knoten aus alle erreichbaren Knoten durch
|
||||||
|
for (MarkedVertex<T> i: this.getSuccessors(nextVertex.getElement())) {
|
||||||
|
|
||||||
|
// Kante finde, die den jetzigen und nächsten Knoten verbindet
|
||||||
|
for (MarkedEdge<U> j: this.getAllEdges()) {
|
||||||
|
if (j.getSource() == nextVertex.getElement() && j.getDestination() == i) {
|
||||||
|
|
||||||
|
//Berechnung der Heuristik über die Luftdistanz des nächsten Knoten zum Zielknoten
|
||||||
|
airDist = (int) Math.sqrt(Math.pow((i.getCords()[0] - n2.getCords()[0]), 2)
|
||||||
|
+ Math.pow((i.getCords()[1] - n2.getCords()[1]), 2));
|
||||||
|
|
||||||
|
// Berechne Distanz zu nächstem Knoten
|
||||||
|
dist = distance.get(nextVertex.getElement()) + j.getWeighting() + airDist;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wenn es schon einen kürzeren Weg zum Knoten gibt, überspringen
|
||||||
|
if ((distance.get(i) <= dist && distance.get(i) != -1) || visited.get(i)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aktualisiere Distanz von Start zu nächstem Knoten
|
||||||
|
distance.put(i, dist);
|
||||||
|
|
||||||
|
// Logging
|
||||||
|
System.out.println("Add " + i.getName() + " with " + dist + " weight to queue.");
|
||||||
|
this.logList.add(new OurLogElement(step, "Step: " + step, 0, nextVertex.getElement().getScreenVertex()));
|
||||||
|
|
||||||
|
// Nehme nächsten Knoten in die Queue auf
|
||||||
|
queue.add(new WrapperElement<>(i, dist));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
System.out.println("Done");
|
System.out.println("Done");
|
||||||
// Gibt Distanz zu gefragtem Knoten zurück
|
// Gibt Distanz zu gefragtem Knoten zurück
|
||||||
return distance.get(n2);
|
return distance.get(n2);
|
||||||
|
@ -267,4 +267,5 @@ public abstract class Graph<T extends VertexMarking, U extends EdgeMarking> {
|
|||||||
|
|
||||||
public abstract int getShortestPathDijkstra(MarkedVertex<T> n1, MarkedVertex<T> n2);
|
public abstract int getShortestPathDijkstra(MarkedVertex<T> n1, MarkedVertex<T> n2);
|
||||||
|
|
||||||
|
public abstract int getShortestPathAStar(MarkedVertex<T> n1, MarkedVertex<T> n2);
|
||||||
}
|
}
|
||||||
|
@ -121,5 +121,8 @@ public class UndirectedGraph<T extends VertexMarking, U extends EdgeMarking> ext
|
|||||||
public int getShortestPathDijkstra(MarkedVertex<T> n1, MarkedVertex<T> n2) {
|
public int getShortestPathDijkstra(MarkedVertex<T> n1, MarkedVertex<T> n2) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
public int getShortestPathAStar(MarkedVertex<T> n1, MarkedVertex<T> n2) {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user