public SteinerTree(UndirectedGraph<Node, DefaultLink> graph, List<Node> steinerNodes) { this.graph = graph; this.steinerNodes = steinerNodes; runAlgorithm(); }
private DirectedWeightedMultigraph<Node, LabeledLink> computeSteinerTree(Set<Node> steinerNodes) { if (steinerNodes == null || steinerNodes.isEmpty()) { logger.error("There is no steiner node."); return null; } // System.out.println(steinerNodes.size()); List<Node> steinerNodeList = new ArrayList<>(steinerNodes); long start = System.currentTimeMillis(); UndirectedGraph<Node, DefaultLink> undirectedGraph = new AsUndirectedGraph<>(this.graphBuilder.getGraph()); logger.debug("computing steiner tree ..."); SteinerTree steinerTree = new SteinerTree(undirectedGraph, steinerNodeList); DirectedWeightedMultigraph<Node, LabeledLink> tree = new TreePostProcess(this.graphBuilder, steinerTree.getDefaultSteinerTree(), null, false).getTree(); //(DirectedWeightedMultigraph<Node, LabeledLink>)GraphUtil.asDirectedGraph(steinerTree.getDefaultSteinerTree()); logger.debug(GraphUtil.labeledGraphToString(tree)); long steinerTreeElapsedTimeMillis = System.currentTimeMillis() - start; logger.debug("total number of nodes in steiner tree: " + tree.vertexSet().size()); logger.debug("total number of edges in steiner tree: " + tree.edgeSet().size()); logger.debug("time to compute steiner tree: " + (steinerTreeElapsedTimeMillis/1000F)); return tree; // long finalTreeElapsedTimeMillis = System.currentTimeMillis() - steinerTreeElapsedTimeMillis; // DirectedWeightedMultigraph<Node, Link> finalTree = buildOutputTree(tree); // logger.info("time to build final tree: " + (finalTreeElapsedTimeMillis/1000F)); // GraphUtil.printGraph(finalTree); // return finalTree; }
new AsUndirectedGraph<>(treeModel); List<Node> steinerNodes = inputNodes; SteinerTree steinerTree = new SteinerTree(GraphUtil.asDefaultGraph(undirectedGraph), steinerNodes); if (steinerTree == null || steinerTree.getLabeledSteinerTree() == null) return m; for (Node n : steinerTree.getLabeledSteinerTree().vertexSet()) { for (LabeledLink e : steinerTree.getLabeledSteinerTree().edgeSet()) {
SteinerTree steinerTree = new SteinerTree(undirectedGraph, steinerNodes); WeightedMultigraph<Node, DefaultLink> tree = steinerTree.getDefaultSteinerTree(); if (tree == null) { logger.debug("resulting tree is null ...");
SteinerTree steinerTree = new SteinerTree( new AsUndirectedGraph<>(this.graphBuilder.getGraph()), Lists.newLinkedList(sn.getNodes())); WeightedMultigraph<Node, DefaultLink> t = steinerTree.getDefaultSteinerTree(); TreePostProcess treePostProcess = new TreePostProcess(this.graphBuilder, t); if (treePostProcess.getTree() != null)