Skip to content

Commit 7978220

Browse files
author
codehouseindia
authored
Merge pull request codehouseindia#156 from shivamadlakha/patch-1
Spanning Tree
2 parents 01f0fcf + 7bbdc49 commit 7978220

1 file changed

Lines changed: 27 additions & 0 deletions

File tree

spanning_tree

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
ValueGraph<Integer, Double> spanningTree(ValueGraph<Integer, Double> graph, boolean minSpanningTree) {
2+
Set<EndpointPair> edges = graph.edges();
3+
List<EndpointPair> edgeList = new ArrayList<>(edges);
4+
5+
if (minSpanningTree) {
6+
edgeList.sort(Comparator.comparing(e -> graph.edgeValue(e).get()));
7+
} else {
8+
edgeList.sort(Collections.reverseOrder(Comparator.comparing(e -> graph.edgeValue(e).get())));
9+
}
10+
11+
int totalNodes = graph.nodes().size();
12+
CycleDetector cycleDetector = new CycleDetector(totalNodes);
13+
int edgeCount = 0;
14+
15+
MutableValueGraph<Integer, Double> spanningTree = ValueGraphBuilder.undirected().build();
16+
for (EndpointPair edge : edgeList) {
17+
if (cycleDetector.detectCycle(edge.nodeU(), edge.nodeV())) {
18+
continue;
19+
}
20+
spanningTree.putEdgeValue(edge.nodeU(), edge.nodeV(), graph.edgeValue(edge).get());
21+
edgeCount++;
22+
if (edgeCount == totalNodes - 1) {
23+
break;
24+
}
25+
}
26+
return spanningTree;
27+
}

0 commit comments

Comments
 (0)