Changeset 2589
- Timestamp:
- 10/24/08 11:14:08 (3 months ago)
- Location:
- XerialJ/trunk/xerial-core/src/main/java/org/xerial/util/graph
- Files:
-
- 1 added
- 2 modified
-
BreadthFirstSearch.java (modified) (13 diffs)
-
DepthFirstSearch.java (modified) (1 diff)
-
GraphHelper.java (added)
Legend:
- Unmodified
- Added
- Removed
-
XerialJ/trunk/xerial-core/src/main/java/org/xerial/util/graph/BreadthFirstSearch.java
r2584 r2589 31 31 * @author leo 32 32 * 33 * @param <Node Type>34 * @param <Edge Type>33 * @param <NodeLabel> 34 * @param <EdgeLabel> 35 35 */ 36 public abstract class BreadthFirstSearch<Node Type, EdgeType>36 public abstract class BreadthFirstSearch<NodeLabel, EdgeLabel> 37 37 { 38 38 enum NodeColor { … … 40 40 } 41 41 42 private Graph<Node Type, EdgeType> _graph;43 private HashMap<Node Type, NodeColor> _nodeColor = new HashMap<NodeType, NodeColor>();44 private HashMap<Node Type, NodeType> _predecessor = new HashMap<NodeType, NodeType>();42 private Graph<NodeLabel, EdgeLabel> _graph; 43 private HashMap<NodeLabel, NodeColor> _nodeColor = new HashMap<NodeLabel, NodeColor>(); 44 private HashMap<NodeLabel, NodeLabel> _predecessor = new HashMap<NodeLabel, NodeLabel>(); 45 45 private int _time; 46 private HashMap<Node Type, Integer> _depth = new HashMap<NodeType, Integer>();46 private HashMap<NodeLabel, Integer> _depth = new HashMap<NodeLabel, Integer>(); 47 47 //private HashMap<NodeType, Integer> _finishTime = new HashMap<NodeType, Integer>(); 48 private Stack<Node Type> nodeStack = new Stack<NodeType>();49 50 public void run(Graph<Node Type, EdgeType> graph)48 private Stack<NodeLabel> nodeStack = new Stack<NodeLabel>(); 49 50 public void run(Graph<NodeLabel, EdgeLabel> graph) 51 51 { 52 52 run(graph, null); 53 53 } 54 54 55 public void run(Graph<Node Type, EdgeType> graph, NodeTypestartNode)55 public void run(Graph<NodeLabel, EdgeLabel> graph, NodeLabel startNode) 56 56 { 57 57 this._graph = graph; 58 58 nodeStack.clear(); 59 59 60 for (Node TypeeachNode : _graph.getNodeLabelSet())60 for (NodeLabel eachNode : _graph.getNodeLabelSet()) 61 61 { 62 62 initializeNode(eachNode); … … 69 69 searchStart(startNode); 70 70 } 71 for (Node Typenode : _graph.getNodeLabelSet())71 for (NodeLabel node : _graph.getNodeLabelSet()) 72 72 { 73 73 searchStart(node); … … 76 76 } 77 77 78 private void searchStart(Node Typenode)78 private void searchStart(NodeLabel node) 79 79 { 80 80 NodeColor color = _nodeColor.get(node); … … 89 89 } 90 90 91 private void bfsVisit(Node Typenode)91 private void bfsVisit(NodeLabel node) 92 92 { 93 93 nodeStack.add(node); … … 98 98 while (!nodeStack.isEmpty()) 99 99 { 100 Node TypecursorNode = nodeStack.pop();100 NodeLabel cursorNode = nodeStack.pop(); 101 101 this.examineNode(cursorNode); 102 102 … … 105 105 this.examineEdge(edge); 106 106 107 Node TypenextNode = _graph.getNodeLabel(edge.getDestNodeID());107 NodeLabel nextNode = _graph.getNodeLabel(edge.getDestNodeID()); 108 108 NodeColor nextNodeColor = _nodeColor.get(nextNode); 109 109 assert (nextNodeColor != null); … … 136 136 } 137 137 138 protected final Graph<NodeLabel, EdgeLabel> getGraph() 139 { 140 return _graph; 141 } 142 143 // utilty methods 144 protected NodeLabel getPredecessor(NodeLabel node) 145 { 146 return _predecessor.get(node); 147 } 148 149 protected int getSearchDepth(NodeLabel node) 150 { 151 return _depth.get(node); 152 } 153 154 protected EdgeLabel getEdgeLabel(Edge edge) 155 { 156 return _graph.getEdgeLabel(edge); 157 } 158 159 protected NodeLabel getSourceNodeLabel(Edge edge) 160 { 161 return GraphHelper.getSourceNodeLabel(_graph, edge); 162 } 163 164 protected NodeLabel getDestNodeLabel(Edge edge) 165 { 166 return GraphHelper.getDestNodeLabel(_graph, edge); 167 } 168 169 protected String toString(Edge edge) 170 { 171 return GraphHelper.toString(_graph, edge); 172 } 173 138 174 /** 139 175 * Invoked before the search starts … … 141 177 * @param node 142 178 */ 143 protected abstract void initializeNode(Node Typenode);179 protected abstract void initializeNode(NodeLabel node); 144 180 145 181 /** … … 148 184 * @param node 149 185 */ 150 protected abstract void startNode(Node Typenode);186 protected abstract void startNode(NodeLabel node); 151 187 152 188 /** … … 155 191 * @param node 156 192 */ 157 protected abstract void discoverNode(Node Typenode);193 protected abstract void discoverNode(NodeLabel node); 158 194 159 195 /** … … 162 198 * @param node 163 199 */ 164 protected abstract void examineNode(Node Typenode);200 protected abstract void examineNode(NodeLabel node); 165 201 166 202 /** … … 183 219 * @param node 184 220 */ 185 protected abstract void finishNode(Node Typenode);221 protected abstract void finishNode(NodeLabel node); 186 222 187 223 /** -
XerialJ/trunk/xerial-core/src/main/java/org/xerial/util/graph/DepthFirstSearch.java
r2584 r2589 163 163 } 164 164 165 protected NodeLabel getSourceNode(Edge edge) 166 { 167 return _graph.getNodeLabel(edge.getSourceNodeID()); 168 } 169 170 protected NodeLabel getDestNode(Edge edge) 171 { 172 return _graph.getNodeLabel(edge.getDestNodeID()); 173 } 174 175 public String toString(Edge edge) 176 { 177 return String.format("(%s,%s)", getGraph().getNodeLabel(edge.getSourceNodeID()).toString(), getGraph() 178 .getNodeLabel(edge.getDestNodeID()).toString()); 165 protected NodeLabel getSourceNodeLabel(Edge edge) 166 { 167 return GraphHelper.getSourceNodeLabel(_graph, edge); 168 } 169 170 protected NodeLabel getDestNodeLabel(Edge edge) 171 { 172 return GraphHelper.getDestNodeLabel(_graph, edge); 173 } 174 175 protected String toString(Edge edge) 176 { 177 return GraphHelper.toString(_graph, edge); 179 178 } 180 179


