From 9b2e31aa325988c4524b5a51562de2a030597276 Mon Sep 17 00:00:00 2001 From: Victoria Date: Sat, 20 Oct 2018 13:53:31 +0300 Subject: [PATCH] feat: Graph bfs --- graphs/bfs.js | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 graphs/bfs.js diff --git a/graphs/bfs.js b/graphs/bfs.js new file mode 100644 index 0000000000..231f5f63b5 --- /dev/null +++ b/graphs/bfs.js @@ -0,0 +1,44 @@ +/* + A non-recursive implementation of bfs with worst-case space complexity O(|E|) +*/ + +function Vertex (name, neighbours) { + this.name = name; + this.neighbours = neighbours; + } + + function bfs (root) { + var visited = {} + var stack = [] + + stack.push(root) + while(!!stack.length) { + var vertex = stack.shift() + + if (!visited[vertex.name]) { + visited[vertex.name] = true + console.log('Visiting vertex ', vertex.name) + + var len = vertex.neighbours.length + for (var index = 0; index < len; index++) { + stack.push(vertex.neighbours[index]) + } + } + } + } + + var root = new Vertex('root', [ + new Vertex('child 1', [ + new Vertex('grandchild 1', []), new Vertex('grandchild 2', []) + ]), + new Vertex('child 2', [ + new Vertex('grandchild 3', []), + ]), + new Vertex('child 3', [ + new Vertex('grandchild 4', [ + new Vertex('grandgrandchild 1', []) + ]), + ]), + ]) + + bfs(root) \ No newline at end of file