Java Reference
In-Depth Information
194
195 @Override
/** Starting bfs search from vertex v */
196
/** To be discussed in Section 28.9 */
197
public
Tree bfs(
int
v) {
198 List<Integer> searchOrder =
new
ArrayList<>();
199
int
[] parent =
new int
[vertices.size()];
200
for
(
int
i =
0
; i < parent.length; i++)
201 parent[i] =
-1
;
// Initialize parent[i] to -1
202
203 java.util.LinkedList<Integer> queue =
204
new
java.util.LinkedList<>();
// list used as a queue
205
boolean
[] isVisited =
new boolean
[vertices.size()];
206 queue.offer(v);
// Enqueue v
207 isVisited[v] =
true
;
// Mark it visited
208
209
while
(!queue.isEmpty()) {
210
int
u = queue.poll();
// Dequeue to u
211 searchOrder.add(u);
// u searched
212
for
(Edge e: neighbors.get(u)) {
213
if
(!isVisited[e.v]) {
214 queue.offer(e.v);
// Enqueue w
215 parent[e.v] = u;
// The parent of w is u
216 isVisited[e.v] =
true
;
// Mark it visited
217 }
218 }
219 }
220
221
bfs
method
return new
Tree(v, parent, searchOrder);
222 }
223
224
/** Tree inner class inside the AbstractGraph class */
225
/** To be discussed in Section 28.6 */
226
public class
Tree {
Tree
inner class
227
private int
root;
// The root of the tree
228
private int
[] parent;
// Store the parent of each vertex
229
private
List<Integer> searchOrder;
// Store the search order
230
231
/** Construct a tree with root, parent, and searchOrder */
232
public
Tree(
int
root,
int
[] parent, List<Integer> searchOrder) {
233
this
.root = root;
234
this
.parent = parent;
235
this
.searchOrder = searchOrder;
236 }
237
238
/** Return the root of the tree */
239
public int
getRoot() {
240
return
root;
241 }
242
243
/** Return the parent of vertex v */
244
public int
getParent(
int
v) {
245
return
parent[v];
246 }
247
248
/** Return an array representing search order */
249
public
List<Integer> getSearchOrder() {
250
return
searchOrder;
251 }
252
253
/** Return number of vertices found */
254
public int
getNumberOfVerticesFound() {
Search WWH ::
Custom Search