This article covers how to implement **Depth First Search (DFS) for Graphs in Javascript**. For more information on Depth First Search and the tree implementation, see the main DFS article.

**Strategy**

Similar to DFS for trees, the Javascript implementation for DFS for graphs is to process nodes in order. The difference is there’s no longer left/right branches, and that we need to keep track of the nodes we’ve visited. This is to prevent infinite traversal.

- remove from top of stack
- process node
- for each neighbor, if it hasn’t been visited
- add to visited list
- add to stack at top (which will be removed first)

```
let adj; //matrix of adjacencies
function DFS (node) {
let stack=[node]; //LIFO: Last In, First Out
let visited=[]; //list of nodes we've visited already
while (stack.length>0) { //while stack isn't empty
const current=stack.pop(); //take from top of stack
//process current node
console.log(current);
//add neighbors to stack and visited list
for (let i=0; i<adj[current].length;i++) {
if (!visited[current]) {
visited.push(current);
stack.push(current);
}
}
}
}
```