














class Graph {
constructor(){
this.adjList ={}
}
addVertex(vertex){
if(!this.adjList[vertex]){
this.adjList[vertex]=[]
}
}
addEdge(v1,v2){
this.adjList[v1].push(v2)
this.adjList[v2].push(v1)
}
print(){
for(let vertex in this.adjList){
console.log(vertex,'->',this.adjList[vertex].join(', '))
}
}
}
const graph= new Graph()
graph.addVertex('A')
graph.addVertex('B')
graph.addVertex('C')
graph.addVertex('D')
graph.addEdge('A','B')
graph.addEdge('A','C')
graph.addEdge('B','D')
graph.addEdge('C','D')
graph.print()
function dfs(graph,start,visited = new Set()){
console.log(start)
visited.add(start)
for(let neighbor of graph[start]){
if(!visited.has(neighbor)){
dfs(graph,neighbor,visited)
}
}
}
dfs(graph.adjList,'A')
function bfs(graph, start) {
const queue = [start]
const visited = new Set([start])
while (queue.length) {
const node = queue.shift()
for (let neighbor of graph[node]) {
if (!visited.has(neighbor)) {
visited.add(neighbor)
queue.push(neighbor)
}
}
}
}
bfs(graph.adjList, 'A')