图
邻接表图
const graph = {
0: [1, 2],
1: [2],
2: [0, 3],
3: [3]
}
遍历图
深度优先遍历
1.访问根节点
2.对根节点的没访问过的相邻节点挨个进行深度优先遍历
// 深度优先遍历
const visited = new Set();
const dfs = (n) => {
console.log(n);
visited.add(n);
graph[n].forEach(c => {
if (!visited.has(c)) {
dfs(c)
}
});
}
广度优先遍历
1.新建一个队列
2.把队头出队并访问
3.把队头的没访问过的相邻节点入队
4.重复2、3步直到队列为空
// 广度优先遍历
const bfs = (n) => {
const visited = new Set();
visited.add(n);
const q = [n];
while (q.length) {
const n = q.shift();
console.log(n);
graph[n].forEach(c => {
if (!visited.has(c)) {
q.push(c)
visited.add(c);
}
});
}
}