Ich habe eine Graph Klasse mit Knotens, wobei jeder Knoten an andere anschließen kann:tief Kopieren eine Graphenstruktur
public class Node {
List<Node> connections;
}
würde Ich mag eine tiefe Kopie des gesamten Graphen machen. Als erster Versuch habe ich versucht, wie ein Copykonstruktor machen:
public Node(Node other) {
connections = new ArrayList<Node>();
for (Node n : other.connections) {
connections.add(new Node(n));
}
}
So tief Kopieren wäre ein Graph einfach:
public Graph deepCopy() {
Graph g = new Graph();
g.nodes = new ArrayList<Node>();
for (Node n : nodes) {
g.nodes.add(new Node(n));
}
}
Aber das funktioniert nicht so, dass die Verbindungsbeziehung zwischen dem zerstört Knoten. Ich frage mich, ob jemand Vorschläge hat, dies auf eine einfache Art und Weise zu tun? Vielen Dank.
Für diejenigen, die nichts über IdentityHashMap wissen, überprüfen Sie [Dokumentation] (http://docs.oracle.com/javase/7/docs/api/java/util/IdentityHashMap.html) – Swapnil
Dies funktioniert, selbst wenn das Diagramm hat Zyklen, oder? –
@ GonçaloRibeiro: Ja, ich denke schon. Ich habe dies vor einer Weile geschrieben, also bin ich mir nicht absolut sicher, aber ich denke, dass die Tatsache, dass wir die Knoten in die Isomorphie-Karte stellen, bevor wir ihre Verbindungen besuchen, bedeutet, dass die Zyklen korrekt behandelt werden. –