# 图是什么
图是”网络结构“的抽象模型,是一组由 边 连接的节点
JS 中没有图,可以用 Object 和 Array 构建图 图的表示法:邻接矩阵,邻接表,关联矩阵...
深度优先遍历 尽可能深的搜索图的分支
- 访问根节点
- 对根节点的”没访问过的相邻节点(避免死循环)“挨个进行深度优先遍历
const visited = new Set() let dfs = (n) => { console.log(n) visited.add(n) path[n].forEach(c => { if (!visited.has(c)) { dfs(c) } }) }
1
2
3
4
5
6
7
8
9
10
11广度优先遍历 先访问离根节点最近的节点
- 新建一个队列,把根节点入队
- 把对头出队并访问
- 把对头的没访问过的相邻节点入队
- 重复二三部,直到队列为空
let bfs = (n) => { const q = [n] visited.add(n) while(q.length) { const n = q.shift() console.log(n) path[n].forEach(c => { if (!visited.has(c)) { q.push(c) visited.add(c) } }) } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14