-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMyTreeUtil.java
More file actions
63 lines (56 loc) · 2.09 KB
/
Copy pathMyTreeUtil.java
File metadata and controls
63 lines (56 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package examples;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.jgrapht.Graph;
import org.jgrapht.GraphTests;
import org.jgrapht.Graphs;
import org.jgrapht.alg.shortestpath.DijkstraShortestPath;
import org.jgrapht.graph.DefaultDirectedGraph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;
public class MyTreeUtil {
public static <V,E> boolean testSpanningTree (Graph <V,E> g, Graph <V,E> t) {
boolean includeEdges = true;
Iterator <E> itEdge = t.edgeSet().iterator();
while (itEdge.hasNext()) {
E e = itEdge.next();
if(g.containsEdge(t.getEdgeSource(e),t.getEdgeTarget(e))==false) {
includeEdges = false;
}
}
return GraphTests.isTree(t) && includeEdges && (g.vertexSet().equals(t.vertexSet()));
}
public static <V,E> void getcoTree (Graph <V,E> coTree, Graph <V,E> basegraph, Graph <V,E> spanningtree) {
Graphs.addAllVertices(coTree, basegraph.vertexSet());
Set <E> edges = new HashSet<E>();
Iterator <E> itEdge = basegraph.edgeSet().iterator();
while (itEdge.hasNext()) {
E e = itEdge.next();
if(spanningtree.containsEdge(basegraph.getEdgeSource(e),basegraph.getEdgeTarget(e))==false) {
edges.add(e);
}
}
Graphs.addAllEdges(coTree, basegraph, edges);
}
public static <V,E> int level (Graph <V,E> g, V root, V v) {
if (g.containsVertex(v)&&root.equals(v)) {
return 0;
} else {
DijkstraShortestPath <V,E> pfinder = new DijkstraShortestPath <> (g);
return pfinder.getPath(root,v).getLength();
}
}
public static void getRootedTree (SimpleGraph <String,DefaultEdge> basegraph, String root, DefaultDirectedGraph <String,DefaultEdge> rt) {
Graphs.addAllVertices(rt, basegraph.vertexSet());
Iterator <DefaultEdge> it = basegraph.edgeSet().iterator();
while (it.hasNext()) {
DefaultEdge e = it.next();
String source = basegraph.getEdgeSource(e);
String target = basegraph.getEdgeTarget(e);
if (level(basegraph,root,source) > level(basegraph,root,target)) {
rt.addEdge(target, source, new DefaultEdge());
} else rt.addEdge(source, target,new DefaultEdge());
}
}
}