JavaScript中没有图这种数据结构,我们可以使用object和array来实现
图的表示(这里使用邻接表表示)
const graph = {
0:[1,2],//表示0可以到达1和2
1:[1,2]
}
图的深度优先遍历
- 访问根节点
- 依对根节点没有访问过的相邻节点进行深度优先遍历
let visited = new Set()//使用集合来记录访问过的节点
const dfs = (n)=>{
console.log(n)//访问
visited.add(n)
graph[n].forEach((item)=>{
if(!visited.has(item)){
dfs(item)
}
})
}
图的广度优先遍历
- 新建队列,将根节点入队
- 队头出队并访问
- 依次将队头的没被访问过的相邻节点入队
- 重复上两步直到队列为空
const bfs = (root)=>{
let q = []
q.push(root)
visited.add(root)
while(q.length>0){
const top = q.shift()
console.log(top)
graph[top].forEach((item)=>{
if(!visited.has(item)){
q.push(item)
visited.add(item)
}
})
}
}