Changeset 2589

Show
Ignore:
Timestamp:
10/24/08 11:14:08 (3 months ago)
Author:
leo
Message:

[ADD] GraphHelper?

Location:
XerialJ/trunk/xerial-core/src/main/java/org/xerial/util/graph
Files:
1 added
2 modified

Legend:

Unmodified
Added
Removed
  • XerialJ/trunk/xerial-core/src/main/java/org/xerial/util/graph/BreadthFirstSearch.java

    r2584 r2589  
    3131 * @author leo 
    3232 *  
    33  * @param <NodeType> 
    34  * @param <EdgeType> 
     33 * @param <NodeLabel> 
     34 * @param <EdgeLabel> 
    3535 */ 
    36 public abstract class BreadthFirstSearch<NodeType, EdgeType> 
     36public abstract class BreadthFirstSearch<NodeLabel, EdgeLabel> 
    3737{ 
    3838    enum NodeColor { 
     
    4040    } 
    4141 
    42     private Graph<NodeType, EdgeType> _graph; 
    43     private HashMap<NodeType, NodeColor> _nodeColor = new HashMap<NodeType, NodeColor>(); 
    44     private HashMap<NodeType, 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>(); 
    4545    private int _time; 
    46     private HashMap<NodeType, Integer> _depth = new HashMap<NodeType, Integer>(); 
     46    private HashMap<NodeLabel, Integer> _depth = new HashMap<NodeLabel, Integer>(); 
    4747    //private HashMap<NodeType, Integer> _finishTime = new HashMap<NodeType, Integer>(); 
    48     private Stack<NodeType> nodeStack = new Stack<NodeType>(); 
    49  
    50     public void run(Graph<NodeType, EdgeType> graph) 
     48    private Stack<NodeLabel> nodeStack = new Stack<NodeLabel>(); 
     49 
     50    public void run(Graph<NodeLabel, EdgeLabel> graph) 
    5151    { 
    5252        run(graph, null); 
    5353    } 
    5454 
    55     public void run(Graph<NodeType, EdgeType> graph, NodeType startNode) 
     55    public void run(Graph<NodeLabel, EdgeLabel> graph, NodeLabel startNode) 
    5656    { 
    5757        this._graph = graph; 
    5858        nodeStack.clear(); 
    5959 
    60         for (NodeType eachNode : _graph.getNodeLabelSet()) 
     60        for (NodeLabel eachNode : _graph.getNodeLabelSet()) 
    6161        { 
    6262            initializeNode(eachNode); 
     
    6969            searchStart(startNode); 
    7070        } 
    71         for (NodeType node : _graph.getNodeLabelSet()) 
     71        for (NodeLabel node : _graph.getNodeLabelSet()) 
    7272        { 
    7373            searchStart(node); 
     
    7676    } 
    7777 
    78     private void searchStart(NodeType node) 
     78    private void searchStart(NodeLabel node) 
    7979    { 
    8080        NodeColor color = _nodeColor.get(node); 
     
    8989    } 
    9090 
    91     private void bfsVisit(NodeType node) 
     91    private void bfsVisit(NodeLabel node) 
    9292    { 
    9393        nodeStack.add(node); 
     
    9898        while (!nodeStack.isEmpty()) 
    9999        { 
    100             NodeType cursorNode = nodeStack.pop(); 
     100            NodeLabel cursorNode = nodeStack.pop(); 
    101101            this.examineNode(cursorNode); 
    102102 
     
    105105                this.examineEdge(edge); 
    106106 
    107                 NodeType nextNode = _graph.getNodeLabel(edge.getDestNodeID()); 
     107                NodeLabel nextNode = _graph.getNodeLabel(edge.getDestNodeID()); 
    108108                NodeColor nextNodeColor = _nodeColor.get(nextNode); 
    109109                assert (nextNodeColor != null); 
     
    136136    } 
    137137 
     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 
    138174    /** 
    139175     * Invoked before the search starts 
     
    141177     * @param node 
    142178     */ 
    143     protected abstract void initializeNode(NodeType node); 
     179    protected abstract void initializeNode(NodeLabel node); 
    144180 
    145181    /** 
     
    148184     * @param node 
    149185     */ 
    150     protected abstract void startNode(NodeType node); 
     186    protected abstract void startNode(NodeLabel node); 
    151187 
    152188    /** 
     
    155191     * @param node 
    156192     */ 
    157     protected abstract void discoverNode(NodeType node); 
     193    protected abstract void discoverNode(NodeLabel node); 
    158194 
    159195    /** 
     
    162198     * @param node 
    163199     */ 
    164     protected abstract void examineNode(NodeType node); 
     200    protected abstract void examineNode(NodeLabel node); 
    165201 
    166202    /** 
     
    183219     * @param node 
    184220     */ 
    185     protected abstract void finishNode(NodeType node); 
     221    protected abstract void finishNode(NodeLabel node); 
    186222 
    187223    /** 
  • XerialJ/trunk/xerial-core/src/main/java/org/xerial/util/graph/DepthFirstSearch.java

    r2584 r2589  
    163163    } 
    164164 
    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); 
    179178    } 
    180179