Hallo zusammen,
Ich will mit diesen beiden Methoden einen Algorithmus schreiben der einen Graph aus Knoten(Vertex) und Kanten(Edge) unter bestimmten Bedingungen schrittweise reduziert. Das reduzieren findet in der move.getAfterState() Methode statt. Nach jedem mal reduzieren soll der dadurch entstehende Graph in der ArrayList states gespeichert werden.
Folgende Methoden hab ich dafür geschrieben:
Der Algorithmus kann zwar den Graphen erfolgreich auf einen Knoten reduzieren aber die states enthält nur x-mal den Endzustand. Beim debuggen ist mir aufgefallen das sobald die move.getAfterState() aufgerufen wird alle einträge der ArrayList mit dem aktuellen Graph (Dem Rückgabe wert von move.getAfterState()) überschrieben werden. Kann mir jemand erklären woran das liegt und wie ich es verhindern kann? Schonmal danke fürs durchlesen und sorry falls ich im falschen sub bin, es ist mein erstes mal hier.
Ich will mit diesen beiden Methoden einen Algorithmus schreiben der einen Graph aus Knoten(Vertex) und Kanten(Edge) unter bestimmten Bedingungen schrittweise reduziert. Das reduzieren findet in der move.getAfterState() Methode statt. Nach jedem mal reduzieren soll der dadurch entstehende Graph in der ArrayList states gespeichert werden.
Folgende Methoden hab ich dafür geschrieben:
Java:
private ArrayList<Move> solve(Graph graph) {
ArrayList<State> states = new ArrayList<>();
for (Vertex v : graph.getVertices().stream().filter(element -> graph.getNeighbours(element).size() == 3).collect(Collectors.toCollection(ArrayList::new))) {
findFastestWay(graph, states, v);
}
return null;
}
private Graph findFastestWay(Graph graph, ArrayList<State> states, Vertex v) {
Graph graph1 = graph;
states.add(new State(graph, counter++));
if (graph1.getVertices().size() == 1) {
return graph1;
} else {
if (graph1.getNeighbours(v).size() == 3) {
Move move = new Move(graph1, v);
findFastestWay(move.getAfterState(), states, v);
}
}
return null;
}
Der Algorithmus kann zwar den Graphen erfolgreich auf einen Knoten reduzieren aber die states enthält nur x-mal den Endzustand. Beim debuggen ist mir aufgefallen das sobald die move.getAfterState() aufgerufen wird alle einträge der ArrayList mit dem aktuellen Graph (Dem Rückgabe wert von move.getAfterState()) überschrieben werden. Kann mir jemand erklären woran das liegt und wie ich es verhindern kann? Schonmal danke fürs durchlesen und sorry falls ich im falschen sub bin, es ist mein erstes mal hier.