Download jar file or use maven. psjava requires Java 1.6 (or above)
<dependency>
<groupId>org.psjava</groupId>
<artifactId>psjava</artifactId>
<version>0.1.19</version>
</dependency>
// Let's prepare a simple graph.
MutableDirectedUnweightedGraph<String> graph = MutableDirectedUnweightedGraph.create();
graph.insertVertex("A");
graph.insertVertex("B");
graph.insertVertex("C");
graph.insertVertex("D");
graph.addEdge("A", "B");
graph.addEdge("B", "C");
graph.addEdge("C", "D");
graph.addEdge("C", "A");
// Use 'Visitor' for handling searching events.
// Here, we will find the back-edge in the graph.
SingleSourceDFS.traverse(graph, "A", new DFSVisitor<String, DirectedEdge<String>>() {
@Override
public void onDiscovered(String vertex, int depth, VisitorStopper stopper) {
}
@Override
public void onWalkDown(DirectedEdge<String> edge) {
}
@Override
public void onBackEdgeFound(DirectedEdge<String> edge) {
// Found! the edge:C->A is a back-edge.
edge.from(); // must be "C"
edge.to(); // must be "A";
}
@Override
public void onFinish(String vertex, int depth) {
}
@Override
public void onWalkUp(DirectedEdge<String> downedEdge) {
}
});
// You can do DFS from multiple sources.
MultiSourceDFS.traverse(graph, VarargsIterable.create("A", "B"), new DFSVisitorBase<String, DirectedEdge<String>>());
// If you don't mind visiting order but want to visit all, do this.
AllSourceDFS.traverse(graph, new DFSVisitorBase<String, DirectedEdge<String>>());
Copyright 2014 psjava team. View on GitHub