#### Graph

S
t
L
Y
L
and 13 more contributors
```class Graph {
constructor () {
}

}

containsVertex (vertex) {
}

if (this.containsVertex(vertex1) && this.containsVertex(vertex2)) {
}
}

printGraph (output = value => console.log(value)) {
for (const i of keys) {
let vertex = ''
for (const j of values) {
vertex += j + ' '
}
output(i + ' -> ' + vertex)
}
}

/**
* Prints the Breadth first traversal of the graph from source.
* @param {number} source The source vertex to start BFS.
*/
bfs (source, output = value => console.log(value)) {
const queue = [[source, 0]] // level of source is 0
const visited = new Set()

while (queue.length) {
const [node, level] = queue.shift() // remove the front of the queue
if (visited.has(node)) { // visited
continue
}

output(`Visited node \${node} at level \${level}.`)
for (const next of this.adjacencyMap[node]) {
queue.push([next, level + 1]) // level 1 more than current
}
}
}

/**
* Prints the Depth first traversal of the graph from source.
* @param {number} source The source vertex to start DFS.
*/
dfs (source, visited = new Set(), output = value => console.log(value)) {
if (visited.has(source)) { // visited
return
}

output(`Visited node \${source}`)
for (const neighbour of this.adjacencyMap[source]) {
this.dfs(neighbour, visited, output)
}
}
}

const example = () => {
const g = new Graph()

// Graph
// 1 -> 2 3
// 2 -> 1 4 5
// 3 -> 1
// 4 -> 2
// 5 -> 2

// g.printGraph()

// Breadth first search at node 1
g.bfs(1)

// Depth first search at node 1
g.dfs(1)
}

export { Graph, example }
```