--- title: Breadth-First Search --- # Breadth-First Search --- ## Solutions
Solution 1 (Click to Show/Hide) ```js function bfs(graph, root) { // Distance object returned var nodesLen = {}; // Set all distances to infinity for (var i = 0; i < graph.length; i++) { nodesLen[i] = Infinity; } nodesLen[root] = 0; // ...except root node var queue = [root]; // Keep track of nodes to visit var current; // Current node traversing // Keep on going until no more nodes to traverse while (queue.length !== 0) { current = queue.shift(); // Get adjacent nodes from current node var curConnected = graph[current]; // Get layer of edges from current var neighborIdx = []; // List of nodes with edges var idx = curConnected.indexOf(1); // Get first edge connection while (idx !== -1) { neighborIdx.push(idx); // Add to list of neighbors idx = curConnected.indexOf(1, idx + 1); // Keep on searching } // Loop through neighbors and get lengths for (var j = 0; j < neighborIdx.length; j++) { // Increment distance for nodes traversed if (nodesLen[neighborIdx[j]] === Infinity) { nodesLen[neighborIdx[j]] = nodesLen[current] + 1; queue.push(neighborIdx[j]); // Add new neighbors to queue } } } return nodesLen; } ```