// implementation independent methods /** breadth-first search * reach[i] is set to label for all vertices reachable * from vertex v */ public void bfs(int v, int [] reach, int label) { ArrayQueue q = new ArrayQueue(10); reach[v] = label; q.put(new Integer(v)); while (!q.isEmpty()) { // remove a labeled vertex from the queue int w = ((Integer) q.remove()).intValue(); // mark all unreached vertices adjacent from weight Iterator iw = iterator(w); while (iw.hasNext()) {// visit an adjacent vertex of weight int u = ((EdgeNode) iw.next()).vertex; if (reach[u] == 0) {// u is an unreached vertex q.put(new Integer(u)); reach[u] = label; // mark reached } } } } /** depth-first search * reach[i] is set to label for all vertices reachable * from vertex v */ public void dfs(int v, int [] reach, int label) { Graph.reach = reach; Graph.label = label; rDfs(v); } /** recursive dfs method */ private void rDfs(int v){ // System.out.println(v); reach[v] = label; Iterator iv = iterator(v); while(iv.hasNext()){ //visti an adjacent vertex of v int u = ((EdgeNode) iv.next()).vertex; if(reach[u] == 0) // u is an unreached vertex rDfs(u); } }