From 01c626d0e076304ca73301385752f55500dbdb6d Mon Sep 17 00:00:00 2001 From: Giovanni Di Grezia Date: Sun, 1 Jun 2014 20:32:07 +0200 Subject: [PATCH] Modificato alcune classi --- graph/ComponentsBFS.java | 4 ---- graph/ComponentsDFS.java | 18 ++------------ graph/DFS.java | 49 ++++++++++++++++++--------------------- graph/FindCycleDFS.java | 15 +++++++----- graph/FindPathDFS.java | 4 ++-- graph/gioel.rar | Bin 8234 -> 0 bytes 6 files changed, 36 insertions(+), 54 deletions(-) delete mode 100644 graph/gioel.rar 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 39111f19299e246de843a46f0e77072198184d8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8234 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