public class BreadthFirstTraversal { public static void traverse(Graph g, int s) { boolean[] visited = new boolean[g.numVertices()]; // algorithm needs to keep track of visited QueueArray q = new QueueArray(); // and routes to explore in the future... System.out.print(s + " "); // <-- Task visited[s] = true; // put source in queue and mark it visited q.enqueue(s); while (!q.isEmpty()) { // Repeat until queue is empty: int v = q.dequeue(); // dequeue v from queue for (int w : g.adj(v)) { // enqueue all unvisited adjacent vertices if (!visited[w]) { // marking them visited as you do so visited[w] = true; System.out.print(w + " "); // <-- Task q.enqueue(w); } } } } public static void main(String[] args) { Graph g = new Graph(7); g.addEdge(0, 1); g.addEdge(0, 6); g.addEdge(1, 3); g.addEdge(1, 5); g.addEdge(1, 6); g.addEdge(2, 3); g.addEdge(2, 5); g.addEdge(2, 6); g.addEdge(3, 4); g.addEdge(4, 5); System.out.println(g); BreadthFirstTraversal.traverse(g, 0); } }