图是什么?
-
图是网络结构的抽象模型,是一组由边连接的节点
-
图可以表示任何二元关系 ,比如道路、航班...
-
JS中没有图,但是可以用Object和Array构建图
-
图的表示法:邻接矩阵、邻接矩阵、关联矩阵...
图的常用操作
- 深度优先遍历
- 广度优先遍历
什么是深度/广度优先遍历?
- 深度优先遍历:尽可能深的搜索图的分支
- 广度优先遍历:先访问离根节点最近的节点
深度优先遍历算法口决
- 访问根节点
- 对根节点的没访问过的相邻节点挨个进行深度优先遍历
coding
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(c =>{
if(!visited.has(c)){
dfs(c);
}
})
}
dfs(2)
//打印 2 0 1 3
广度优先遍历算法口决
- 新建一个队列,把根节点入队
- 把队头出队并访问
- 把队头的没访问过的相邻节点入队
- 重复第二、三步,直到队列为空
coding
const graph = {
0: [1, 2],
1: [2],
2: [0, 3],
3: [3]
};
const visited = new Set();
const q = [2];
while(q.length){
const n = q.shift();
console.log(n);
visited.add(n);
graph[n].forEach(c=>{
if(!visited.has(c)){
q.push(c);
}
})
}
//打印 2 0 3 1