一、写在前面
图的深度优先遍历和广度优先遍历,也是我们必须要明白的算法。下面我们以有向图为了,来总结一下,图是如何做到深度优先遍历和广度优先遍历的。
使用数组表示如下所示
let graph = {
0: [1, 2],
1: [2],
2: [0, 3],
3: [3]
}
二、深度优先遍历
const graph = require('./database')
let set = new Set() //使用Set数据结构来保存已经访问了的node节点。
const dfs = (node) => {
console.log(node)
set.add(node) //将访问好的node节点,放入set中
graph[node].forEach(item => {
if(!set.has(item)) { //如果当前节点没有被访问,则进行递归访问
dfs(item)
}
})
}
dfs(2)
//2 0 1 3
二、广度优先遍历
const graph = require('./database')
const bfs = (node) => {
let set = new Set()
let queue = [node]
while(queue.length) {
let cur = queue.shift()
set.add(cur)
console.log(cur)
graph[cur].forEach(item => {
if(!set.has(item)) {
queue.push(item)
}
})
}
}
bfs(2) //2031
下面代码为广度优先遍历,我们使用的数据结构是Set(集合)和queue的 数据结构。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_47450807/article/details/123425967
内容来源于网络,如有侵权,请联系作者删除!