数据结构 - 图
图是什么
- 图是网络结构的抽象模型,是一组由边连接的节点
- 图可以表示任何二元关系,比如道路,航班
图的表示法
-
js中用Object 和 Array来表示图
-
图的表示法: 邻接矩阵、邻接表、关联矩阵…
邻接矩阵
邻接表
图的深度和广度优先遍历
深度优先遍历
- 访问根节点
- 对根节点的
没有访问过的相邻节点
进行深度优先遍历
const graph = {
0: [1, 2],
1: [2],
2: [0, 3],
3: [3]
}
const visited = new Set();
const dfs = (n) => {
console.log(n)
visited.add(n)
graph[n].forEach(item => {
if (!visited.has(item)) {
dfs(item)
}
});
}
dfs(2) // 2 0 1 3
广度优先遍历
- 新建一个队列,把根节点入队
- 对头出队并访问
- 把对头的
没有访问过的相邻节点
入队 - 重复二、三步,直至队列为空
const visited = new Set();
const bfs = (n) => {
const queue = [n];
visited.add(n);
while (queue.length) {
const o = queue.shift();
console.log(o);
graph[o].forEach(item => {
if (!visited.has(item)) {
visited.add(item);
queue.push(item);
}
});
}
}
bfs(2) // 2 0 3 1