/** This class specializes DFS to find a path between the start vertex * and a given target vertex. */ public class FindPathDFS extends DFS { protected List path; protected boolean done; protected Vertex target; /** @param info target vertex of the path * @return {@link Iterator} of the vertices and edges in a path * from the start vertex to the target vertex, or an empty iterator * if no such path exists in the graph */ public Object execute(Graph g, Vertex start, Object info) { init(g); path = new NodeList(); done = false; target = (Vertex) info; // target vertex is stored in info parameter dfsTraversal(start); return path.elements(); } protected void startVisit(Vertex v) { path.insertLast(v); // add vertex v to path if (v == target) done = true; } protected void finishVisit(Vertex v) { path.remove(path.last()); // remove v from path if(!path.isEmpty()) // if v is not the start vertex path.remove(path.last()); // remove discovery edge into v from path } protected void traverseDiscovery(Edge e, Vertex from) { path.insertLast(e); // add edge e to the path } protected boolean isDone() { return done; } }