33import java .util .ArrayList ;
44import java .util .List ;
55import java .util .Set ;
6+ import java .util .function .Supplier ;
67
7- import org .jgrapht .EdgeFactory ;
88import org .jgrapht .Graph ;
99import org .jgrapht .alg .shortestpath .BellmanFordShortestPath ;
1010import org .jgrapht .alg .shortestpath .DijkstraShortestPath ;
@@ -23,12 +23,12 @@ public class SteinerTreeGeneric<V, E> {
2323 Graph <V , E > graph ;
2424 WeightedMultigraph <V , E > tree ;
2525 List <V > steinerNodes ;
26- private final EdgeFactory < V , E > edgeFactory ;
26+ private final Class <? extends E > edgeClass ;
2727
28- public SteinerTreeGeneric (Graph <V , E > graph , List <V > steinerNodes , EdgeFactory < V , E > edgeFactory ) {
28+ public SteinerTreeGeneric (Graph <V , E > graph , List <V > steinerNodes , Class <? extends E > edgeClass ) {
2929 this .graph = graph ;
3030 this .steinerNodes = steinerNodes ;
31- this .edgeFactory = edgeFactory ;
31+ this .edgeClass = edgeClass ;
3232
3333 runAlgorithm ();
3434 }
@@ -40,7 +40,7 @@ private Pseudograph<V, E> step1() {
4040
4141 logger .debug ("<enter" );
4242
43- Pseudograph <V , E > g = new WeightedPseudograph <V , E >(edgeFactory );
43+ Pseudograph <V , E > g = new WeightedPseudograph <V , E >(edgeClass );
4444
4545 for (V n : this .steinerNodes ) {
4646 g .addVertex (n );
@@ -57,8 +57,7 @@ private Pseudograph<V, E> step1() {
5757 if (g .containsEdge (n1 , n2 ))
5858 continue ;
5959
60- E e = edgeFactory .createEdge (n1 , n2 );
61- g .addEdge (n1 , n2 , e );
60+ E e = g .addEdge (n1 , n2 );
6261 g .setEdgeWeight (e , pathGen .getPathWeight (n1 , n2 ));
6362
6463 }
@@ -87,7 +86,7 @@ private WeightedMultigraph<V, E> step2(Pseudograph<V, E> g1) {
8786
8887 Set <E > edges = mst .getSpanningTree ().getEdges ();
8988
90- WeightedMultigraph <V , E > g2 = new WeightedMultigraph <>(edgeFactory );
89+ WeightedMultigraph <V , E > g2 = new WeightedMultigraph <>(edgeClass );
9190
9291 List <E > edgesSortedById = new ArrayList <>(edges );
9392// edgesSortedById.sort();
@@ -114,7 +113,7 @@ private WeightedMultigraph<V, E> step3(WeightedMultigraph<V, E> g2) {
114113
115114 logger .debug ("<enter" );
116115
117- WeightedMultigraph <V , E > g3 = new WeightedMultigraph <>(edgeFactory );
116+ WeightedMultigraph <V , E > g3 = new WeightedMultigraph <>(edgeClass );
118117
119118 Set <E > edges = g2 .edgeSet ();
120119 DijkstraShortestPath <V , E > pathGen = new DijkstraShortestPath <>(this .graph );
@@ -170,7 +169,7 @@ private WeightedMultigraph<V, E> step4(WeightedMultigraph<V, E> g3) {
170169
171170 Set <E > edges = mst .getSpanningTree ().getEdges ();
172171
173- WeightedMultigraph <V , E > g4 = new WeightedMultigraph <>(edgeFactory );
172+ WeightedMultigraph <V , E > g4 = new WeightedMultigraph <>(edgeClass );
174173
175174 List <E > edgesSortedById = new ArrayList <>(edges );
176175// Collections.sort(edgesSortedById);
@@ -241,7 +240,7 @@ private void runAlgorithm() {
241240// GraphUtil.printGraph(g1);
242241
243242 if (g1 .vertexSet ().size () < 2 ) {
244- this .tree = new WeightedMultigraph <>(edgeFactory );
243+ this .tree = new WeightedMultigraph <>(edgeClass );
245244 for (V n : g1 .vertexSet ()) this .tree .addVertex (n );
246245 return ;
247246 }
0 commit comments