#### Graph

N
```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