返回
TypeScript绘就图的精彩画卷,纵览广度优先搜索与深度优先搜索
前端
2023-09-27 13:05:10
遍历图的世界,广度优先搜索与深度优先搜索携手共进
在图论的浩瀚宇宙中,遍历是了解图结构及其性质的至关重要的概念。遍历图意味着访问图中的每一个顶点,就像探索一个错综复杂的迷宫,寻找隐藏的宝藏。而广度优先搜索与深度优先搜索,则犹如两位经验丰富的探险家,带领我们穿越图的每一处角落,揭示其内在的奥秘。
广度优先搜索:层层推进,稳扎稳打
广度优先搜索,正如其名,是一种从图的根节点出发,逐层探索相邻顶点的遍历方法。它就像一位细致的园丁,从花园的一角开始,逐一修剪每一株花草,不放过任何一个角落。
- 从图的根节点开始,访问该节点。
- 将根节点的所有相邻节点加入队列。
- 从队列中取出一个节点,访问该节点。
- 将该节点的所有相邻节点加入队列。
- 重复步骤3和步骤4,直到队列为空。
深度优先搜索:纵深探索,一往无前
深度优先搜索,则与广度优先搜索截然不同。它从图的根节点出发,沿着一条路径一直向下探索,直到遇到死胡同,再回溯到上一个未探索过的节点,继续探索。它就像一位勇敢的登山者,不畏艰险,勇攀高峰,直到征服每一座山峰。
- 从图的根节点开始,访问该节点。
- 将根节点的所有相邻节点加入栈。
- 从栈中弹出一个节点,访问该节点。
- 将该节点的所有相邻节点加入栈。
- 重复步骤3和步骤4,直到栈为空。
TypeScript绘就图的画卷,演绎遍历的精彩
为了让图遍历的概念更加鲜活,我们借助TypeScript,将广度优先搜索与深度优先搜索的算法变为现实,让您亲身体验算法之美。
class Graph {
constructor(vertices: number) {
this.vertices = vertices;
this.edges = new Array(vertices).fill(0).map(() => new Array(vertices).fill(false));
}
addEdge(u: number, v: number) {
this.edges[u][v] = true;
this.edges[v][u] = true;
}
breadthFirstSearch(start: number) {
const visited = new Array(this.vertices).fill(false);
const queue = [];
visited[start] = true;
queue.push(start);
while (queue.length) {
const current = queue.shift();
console.log(current);
for (let i = 0; i < this.vertices; i++) {
if (this.edges[current][i] && !visited[i]) {
visited[i] = true;
queue.push(i);
}
}
}
}
depthFirstSearch(start: number) {
const visited = new Array(this.vertices).fill(false);
const stack = [];
visited[start] = true;
stack.push(start);
while (stack.length) {
const current = stack.pop();
console.log(current);
for (let i = 0; i < this.vertices; i++) {
if (this.edges[current][i] && !visited[i]) {
visited[i] = true;
stack.push(i);
}
}
}
}
}
const graph = new Graph(6);
graph.addEdge(0, 1);
graph.addEdge(0, 2);
graph.addEdge(1, 3);
graph.addEdge(2, 4);
graph.addEdge(2, 5);
graph.addEdge(3, 4);
graph.addEdge(4, 5);
console.log("广度优先搜索:");
graph.breadthFirstSearch(0);
console.log("深度优先搜索:");
graph.depthFirstSearch(0);
结语:纵览图遍历的奇妙世界
通过本文的探索,我们领略了图遍历的奇妙世界,并通过TypeScript的实现,亲身体验了广度优先搜索与深度优先搜索的魅力。算法与数据结构,就像两块瑰丽的拼图,共同构建出计算机科学的壮丽画卷。它们不仅为计算机带来了智慧,也为我们带来了改变世界的可能。