From 76dab7ff7b6f1f778b60411d122bb972fc1099b2 Mon Sep 17 00:00:00 2001 From: Tapajyoti Bose Date: Wed, 15 Jul 2020 12:31:27 +0530 Subject: [PATCH] Added DFS (Iterative) - Graph --- Graphs/DepthFirstSearchIterative.js | 51 +++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Graphs/DepthFirstSearchIterative.js diff --git a/Graphs/DepthFirstSearchIterative.js b/Graphs/DepthFirstSearchIterative.js new file mode 100644 index 0000000000..3eb9c1f832 --- /dev/null +++ b/Graphs/DepthFirstSearchIterative.js @@ -0,0 +1,51 @@ +class GraphUnweightedUndirected { + // Unweighted Undirected Graph class + constructor () { + this.connections = {} + } + + addNode (node) { + // Function to add a node to the graph (connection represented by set) + this.connections[node] = new Set() + } + + addEdge (node1, node2) { + // Function to add an edge (adds the node too if they are not present in the graph) + if (!(node1 in this.connections)) { this.addNode(node1) } + if (!(node2 in this.connections)) { this.addNode(node2) } + this.connections[node1].add(node2) + this.connections[node2].add(node1) + } + + DFSIterative (node, value) { + // DFS Function to search if a node with the given value is present in the graph + const stack = [node] + const visited = new Set() + while (stack.length > 0) { + const currNode = stack.pop() + // if the current node contains the value being searched for, true is returned + if (currNode === value) { return true } + // adding the current node to the visited set + visited.add(currNode) + // adding neighbours in the stack + for (const neighbour of this.connections[currNode]) { + if (!visited.has(neighbour)) { + stack.push(neighbour) + } + } + } + return false + } +} + +function main () { + const graph = new GraphUnweightedUndirected() + graph.addEdge(1, 2) + graph.addEdge(2, 3) + graph.addEdge(2, 4) + graph.addEdge(3, 5) + console.log(graph.DFSIterative(5, 1)) + console.log(graph.DFSIterative(5, 100)) +} + +main()