5 Stimmen

Gewichte in JgraphT anzeigen

Ich habe diesen Graphen implementiert:

ListenableDirectedWeightedGraph<String, MyWeightedEdge> g = 
    new ListenableDirectedWeightedGraph<String, MyWeightedEdge>(MyWeightedEdge.class); 

Um zu zeigen, was der Name der Klasse sagt: ein einfacher, gerichteter, gewichteter Graph. Ich möchte die Beschriftung der Kanten ändern und statt des Formats

return "(" + source + " : " + target + ")"; 

Ich möchte, dass es das Gewicht der Kante zeigt. Mir ist klar, dass alle Aktionen an den Knoten, z. B. die getEdgesWeight() Methode, werden vom Graphen und nicht von der Kante delegiert. Wie kann ich das Gewicht der Kante anzeigen? Muss ich den Graph irgendwie an die Kante übergeben?

Für jede Hilfe sind wir dankbar.

2voto

Alex Punkte 349

Ich gehe davon aus, dass die Klasse MyWeightedEdge bereits eine Methode wie die folgende enthält

public void setWeight(double weight)

Wenn dies tatsächlich der Fall ist, müssen Sie Folgendes tun:

Leiten Sie Ihre eigene Unterklasse von ListenableDirectedWeightedGraph (z.B., ListenableDirectedWeightedGraph ). Ich würde beide Konstruktorversionen hinzufügen und an "super" delegieren, um die Kompatibilität mit der ursprünglichen Klasse zu gewährleisten.

Erstellen Sie das Diagramm wie in Ihrer Frage, aber unter Verwendung der neuen Klasse

ListenableDirectedWeightedGraph g = 
    new CustomListenableDirectedWeightedGraph(
        MyWeightedEdge.class);

Überschreiben Sie die Methode setEdgeWeight wie folgt:

public void setEdgeWeight(E e, double weight) {
    super.setEdgeWeight(e, weight);
    ((MyWeightedEdge)e).setWeight(weight);
}

Und zu guter Letzt, überschreiben Sie die toString Methode der Klasse MyWeightedEdge um das Etikett zurückzugeben, das die Kante haben soll (vermutlich einschließlich des Gewichts, das ihr nun zur Verfügung steht).

Ich hoffe, das hilft.

0 Stimmen

User5915 hat nicht erwähnt, was er zur Visualisierung seines Graphen verwendet hat, aber ich nehme an, es war jgraph. Es ist, als würdest du ihm sagen, er solle seine eigene Bibliothek schreiben O.o

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X