diff --git a/graph/ComponentsBFS.java b/graph/ComponentsBFS.java index 983e1c1..43971aa 100644 --- a/graph/ComponentsBFS.java +++ b/graph/ComponentsBFS.java @@ -1,9 +1,5 @@ -//gioel - package graph; -import exceptions.InvalidKeyException; - public class ComponentsBFS extends BFS { protected Integer compNumber; protected Object COMPONENT = new Object(); diff --git a/graph/ComponentsDFS.java b/graph/ComponentsDFS.java index 874a83b..3f31b9a 100644 --- a/graph/ComponentsDFS.java +++ b/graph/ComponentsDFS.java @@ -1,35 +1,21 @@ package graph; -//begin#fragment CC - -import exceptions.InvalidKeyException; - /** This class extends DFS to compute the connected components of a graph. */ public class ComponentsDFS extends DFS { protected Integer compNumber; // Connected component number protected Object COMPONENT = new Object(); // Connected comp. selector protected void setup() { compNumber = 1; } protected void startVisit(Vertex v) { - try{ v.put(COMPONENT, compNumber); - } - catch (InvalidKeyException e){ - // - } } protected Integer finalResult(Integer dfsResult) { - try{ for (Vertex v : graph.vertices()) // check for any unvisited vertices if (v.get(STATUS) == UNVISITED) { compNumber += 1; // we have found another connected component dfsTraversal(v); // visit all the vertices of this component } return compNumber; - } - catch (InvalidKeyException e){ - // - } - return null; + } } -//end#fragment CC + diff --git a/graph/DFS.java b/graph/DFS.java index 5457617..0628da6 100644 --- a/graph/DFS.java +++ b/graph/DFS.java @@ -38,34 +38,33 @@ public class DFS { if (!isDone()) startVisit(v); if (!isDone()) { - visit(v); - for (Edge e: graph.incidentEdges(v)) { - if (!isVisited(e)) { - // found an unexplored edge, explore it - visit(e); - Vertex w = graph.opposite(v, e); - if (!isVisited(w)) { - // w is unexplored, this is a discovery edge - traverseDiscovery(e, v); - if (isDone()) break; - visitResult = dfsTraversal(w); // get result from DFS-tree child - if (isDone()) break; - } - else { - // w is explored, this is a back edge - traverseBack(e, v); - if (isDone()) break; - } - } - } + visit(v); + for (Edge e: graph.incidentEdges(v)) { + if (!isVisited(e)) { + // found an unexplored edge, explore it + visit(e); + Vertex w = graph.opposite(v, e); + if (!isVisited(w)) { + // w is unexplored, this is a discovery edge + traverseDiscovery(e, v); + if (isDone()) break; + visitResult = dfsTraversal(w); // get result from DFS-tree child + if (isDone()) break; + } else { + // w is explored, this is a back edge + traverseBack(e, v); + if (isDone()) break; + } + } + } } if(!isDone()) finishVisit(v); return result(); } - //end#fragment DFS2 - //begin#fragment decorations + + /** Mark a position (vertex or edge) as visited. */ protected void visit(DecorablePosition p) throws InvalidKeyException{ p.put(STATUS, VISITED); @@ -100,7 +99,5 @@ public class DFS { protected R result() { return null; /* default value */ } /** Returns the final result of the DFS execute method. */ protected R finalResult(R r) { return r; /* default value */ } -//end#fragment auxiliary -//begin#fragment Tail -} // end of DFS class -//end#fragment Tail + +} diff --git a/graph/FindCycleDFS.java b/graph/FindCycleDFS.java index c7cbd25..9e9a0c9 100644 --- a/graph/FindCycleDFS.java +++ b/graph/FindCycleDFS.java @@ -1,5 +1,5 @@ package graph; -//begin#fragment FindCycleDFS + import position.NodePositionList; import position.Position; @@ -9,25 +9,26 @@ import position.PositionList; //end#fragment FindCycleDFS /* @author Roberto Tamassia, Michael Goodrich, Eric Zamore */ -//begin#fragment FindCycleDFS + public class FindCycleDFS extends DFS> { protected PositionList cycle; // sequence of edges of the cycle protected boolean done; protected Vertex cycleStart; -//end#fragment FindCycleDFS + /** * Executes the DFS algorithm. * @return collection containing the vertices and * edges of a cycle. */ -//begin#fragment FindCycleDFS + public void setup() { cycle = new NodePositionList(); done = false; } protected void startVisit(Vertex v) { cycle.addLast(v); } + protected void finishVisit(Vertex v) { cycle.remove(cycle.last()); // remove v from cycle if (!cycle.isEmpty()) cycle.remove(cycle.last()); // remove edge into v from cycle @@ -35,13 +36,15 @@ public class FindCycleDFS protected void traverseDiscovery(Edge e, Vertex from) { cycle.addLast(e); } + protected void traverseBack(Edge e, Vertex from) { cycle.addLast(e); // back edge e creates a cycle cycleStart = graph.opposite(from, e); cycle.addLast(cycleStart); // first vertex completes the cycle done = true; } - protected boolean isDone() { return done; } + protected boolean isDone() { return done; } + public Iterable finalResult(Iterable r) { // remove the vertices and edges from start to cycleStart if (!cycle.isEmpty()) { @@ -54,5 +57,5 @@ public class FindCycleDFS return cycle; // list of the vertices and edges of the cycle } } -//end#fragment FindCycleDFS + diff --git a/graph/FindPathDFS.java b/graph/FindPathDFS.java index deeed5d..04779fe 100644 --- a/graph/FindPathDFS.java +++ b/graph/FindPathDFS.java @@ -1,6 +1,5 @@ package graph; -//begin#fragment FindPathDFS import position.NodePositionList; import position.Position; @@ -15,6 +14,7 @@ public class FindPathDFS extends DFS, Iterable> { protected PositionList path; protected boolean done; + /** Setup method to initialize the path. */ public void setup() { path = new NodePositionList(); @@ -40,4 +40,4 @@ public class FindPathDFS return path; } } -//end#fragment FindPathDFS + diff --git a/graph/gioel.rar b/graph/gioel.rar deleted file mode 100644 index 39111f1..0000000 Binary files a/graph/gioel.rar and /dev/null differ