Ich versuche, die Kanten in meinem Diagramm kleines Beispiel zu umkehren, von hier:die Kanten Umkehren in gerichtetem gewichteten Graphen
(1)---1--->(8)
\ /
2 1
\ /
v v
(4)
dazu:.
(1)<---1---(8)
^ ^
\ /
2 1
\ /
(4)
Ich habe versucht:
private static void Transpose(EdgeWeightedDigraph G) {
for (int v = 0; v < G.V(); v++) {
// reverse so that adjacency list is in same order as original
Stack<DirectedEdge> reverse = new Stack<DirectedEdge>();
for (DirectedEdge e : G.adj(v)) {
reverse.push(e);
}
for (DirectedEdge e : reverse) {
adj[v].add(e);
}
}
}
Ideen bitte?
Update 1:
private static Bag<DirectedEdge>[] adj; // adj[v] = adjacency list for vertex v
adj = (Bag<DirectedEdge>[]) new Bag[G.V()];
for (int v = 0; v < G.V(); v++)
adj[v] = new Bag<DirectedEdge>();
Der Ausgang für meinen Code ist der gleiche Graph, hat mein Code nicht die Kanten umkehren
Update 2: EdgeWeightedGraph
Update 3:
dies ist der richtige Link: EdgeWeightedDigraph
nicht die vorherige
dies nützlich sein wird, auch DirectedEdge
Ich denke, dass es ein Problem mit der Zeile 'adj [v] .add (e) gibt;' Keine Ahnung, woher 'adj [v]' kommt. Bitte aktualisieren Sie den Code. – entpnerd
Würde es Ihnen etwas ausmachen, die Implementierung für 'EdgeWeightedDigraph' hinzuzufügen? Kann sich diese Klasse ändern oder muss die Lösung außerhalb dieser Klasse liegen? – entpnerd
Korrigiere ich, dass es nicht das Ziel ist, das ursprüngliche Diagramm zu ändern, sondern stattdessen ein neues Diagramm mit umgekehrten Kanten zu erstellen? Aufgrund des von Ihnen bereitgestellten Quellcodes und der Implementierung der Edge-Klasse habe ich Zweifel, dass eine In-Place-Lösung gefragt ist. – entpnerd