Java Reference
In-Depth Information
134
return true ;
135 }
136
else {
137
return false ;
138 }
139 }
140
141 @Override /** Add an edge to the graph */
142
public boolean addEdge( int u, int v) {
addEdge overloaded
143
return addEdge( new Edge(u, v));
144 }
145
146
/** Edge inner class inside the AbstractGraph class */
147
public static class Edge {
Edge inner class
148
public int u; // Starting vertex of the edge
149
public int v; // Ending vertex of the edge
150
151
/** Construct an edge for (u, v) */
152
public Edge( int u, int v) {
153
this .u = u;
154
this .v = v;
155 }
156
157
public boolean equals(Object o) {
158
return u == ((Edge)o).u && v == ((Edge)o).v;
159 }
160 }
161
162 @Override /** Obtain a DFS tree starting from vertex v */
163 /** To be discussed in Section 28.7 */
164 public Tree dfs( int v) {
165 List<Integer> searchOrder = new ArrayList<>();
166 int [] parent = new int [vertices.size()];
167 for ( int i = 0 ; i < parent.length; i++)
168 parent[i] = -1 ; // Initialize parent[i] to -1
169
170
dfs method
// Mark visited vertices
171
boolean [] isVisited = new boolean [vertices.size()];
172
173 // Recursively search
174 dfs(v, parent, searchOrder, isVisited);
175
176
// Return a search tree
177
return new Tree(v, parent, searchOrder);
178 }
179
180 /** Recursive method for DFS search */
181 private void dfs( int u, int [] parent, List<Integer> searchOrder,
182 boolean [] isVisited) {
183 // Store the visited vertex
184 searchOrder.add(u);
185 isVisited[u] = true ; // Vertex v visited
186
187 for (Edge e : neighbors.get(u)) {
188 if (!isVisited[e.v]) {
189 parent[e.v] = u; // The parent of vertex e.v is u
190 dfs(e.v, parent, searchOrder, isVisited); // Recursive search
191 }
192 }
193 }
 
 
Search WWH ::




Custom Search