class Grapg<T> {verteces: T[] = [];adjList: Map<T, T[]> = new Map();addVertex(v: T) {this.verteces.push(v);this.adjList.set(v, []);}addEdge(v: T, w: T) {this.adjList.get(v)?.push(w);this.adjList.get(w)?.push(v);}printEdges() {this.verteces.forEach((vertex) => {console.log(`${vertex} -> ${this.adjList.get(vertex)?.join(' ')}`);});}BFS() {if (this.verteces.length === 0) return;const visited = new Set<T>(); visited.add(this.verteces[0]); const queue = [this.verteces[0]]; while (queue.length) {const v = queue.shift()!; console.log(v); const vEdges = this.adjList.get(v); if (!vEdges) continue;for (const e of vEdges) {if (!visited.has(e)) {visited.add(e);queue.push(e);}}}}DFS() {if (this.verteces.length === 0) return;const visited = new Set<T>(); visited.add(this.verteces[0]); const stack = [this.verteces[0]]; while (stack.length) {const v = stack.pop()!; console.log(v); const vEdges = this.adjList.get(v); if (!vEdges) return; for (let i = vEdges.length - 1; i >= 0; i--) {const e = vEdges[i]; if (!visited.has(e)) {stack.push(e);visited.add(e);}}}}
}const graph = new Grapg<string>();
for (let i = 0; i < 9; i++) {graph.addVertex(String.fromCharCode(65 + i));
}
graph.addEdge('A', 'B');
graph.addEdge('A', 'C');
graph.addEdge('A', 'D');
graph.addEdge('C', 'D');
graph.addEdge('C', 'G');
graph.addEdge('D', 'G');
graph.addEdge('D', 'H');
graph.addEdge('B', 'E');
graph.addEdge('B', 'F');
graph.addEdge('E', 'I');
graph.printEdges();
console.log('BFS');
graph.BFS();
console.log('DFS');
graph.DFS();
