// https://www.freecodecamp.org/learn/coding-interview-prep/data-structures/breadth-first-search function bfs(graph, root) { const nodesLen = {}; const n_nodes = graph[root].length; for (let dst = 0; dst < n_nodes; dst++) { nodesLen[dst] = Infinity; } nodesLen[root] = 0; for (let q = [root], d = 1; ; d++) { const newQ = []; for (let src of q) { for (let dst = 0; dst < n_nodes; dst++) { if (nodesLen[dst] > d && graph[src][dst] > 0) { nodesLen[dst] = d; newQ.push(dst); } } } if (newQ.length <= 0) { break; } q = newQ; } return nodesLen; } var exBFSGraph = [ [0, 1, 0, 0], [1, 0, 1, 0], [0, 1, 0, 1], [0, 0, 1, 0], ]; console.log(bfs(exBFSGraph, 3));