图✅
图的遍历
答案
图的遍历主要有两种方式:深度优先搜索(DFS)和广度优先搜索(BFS)。
深度优先搜索(DFS)
function dfs (graph, start) {
const visited = new Set()
function traverse (node) {
if (visited.has(node)) return
visited.add(node)
console.log(node)
for (const neighbor of graph[node]) {
traverse(neighbor)
}
}
traverse(start)
}
const graph = {
A: ['B', 'C'],
B: ['D', 'E'],
C: ['F'],
D: [],
E: ['F'],
F: []
}
dfs(graph, 'A') // A B D E F C
广度优先搜索(BFS)
function bfs (graph, start) {
const visited = new Set()
const queue = [start]
while (queue.length > 0) {
const node = queue.shift()
if (visited.has(node)) continue
visited.add(node)
console.log(node)
for (const neighbor of graph[node]) {
if (!visited.has(neighbor)) {
queue.push(neighbor)
}
}
}
}
bfs(graph, 'A') // A B C D E F
最短路径算法
给定一个加权有向图,找到从起点到终点的最短路径。
const graph = {
A: { B: 1, C: 4 },
B: { C: 2, D: 5 },
C: { D: 1 },
D: {}
}
function dijkstra (graph, start) {
}
答案
Tests
最小生成树
给定一个加权无向图,找到其最小生成树。
const graph = {
A: { B: 1, C: 4 },
B: { A: 1, C: 2, D: 5 },
C: { A: 4, B: 2, D: 1 },
D: { B: 5, C: 1 }
}
function kruskal (graph) {
}
答案
Tests
拓扑排序
给定一个有向无环图,找到其拓扑排序。
const graph = {
A: ['B', 'C'],
B: ['D'],
C: ['D'],
D: []
}
function topologicalSort (graph) {
}
答案
Tests