图
图是什么
*图是网络结构的抽象模型,是一组由边连接的节点
*图可以表示任何二元关系,比如道路,航班......
*js中没有图,但是可以用Object和Array构建图
*图的表示法:邻接矩阵,邻接表,关联矩阵....
只要相邻,就在行上和相应的列为1,表示相邻
a能连接到b所以a里有b
图的常用操作
*深度优先遍历
*广度优先遍历
什么是深度/广度优先遍历
*深度优先遍历:尽可能深的搜索图的分支
深度优先遍历:先访问离根节点最近的节点
深度优先遍历算法口诀
*访问根节点
*对根节点的没访问 的相邻节点挨个进行深度优先遍历
const graph = require('./graph'); 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)
广度优先遍历算法口诀
*新建一个队列,把根节点入队
*把队头出队并访问
*把队头的没访问过的相邻节点入队
*重复二。三,直到队列为空
const graph=require("./graph") const visited = new Set(); visited.add(2) const q = [2] while (q.length){ const n = q.shift() console.log(n) //visited.add(n)//已经在队列中,但是未在visited中->就会重复添加到队列中 graph[n].forEach(c=>{ if(!visited.has(c)){ q.push(c) visited.add(c) } }) }
graph.js
const graph={ 0 :[1,2], 1:[2], 2:[0,3], 3:[3] } module.exports=graph
技术要点
*图是网络结构的抽象模型,是一组由边连接的节点
*图的表示法:邻接矩阵,邻接表,关联矩阵....
*深度优先遍历
*广度优先遍历