图的深度与广度优先遍历

Posted 沿着路走到底

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图的深度与广度优先遍历相关的知识,希望对你有一定的参考价值。

深度优先

访问根节点

对根节点的没访问过的相邻节点挨个进行深度优先遍历

广度优先

新建一个队列,把根节点入队

把队头出队并访问

把队头的没访问过的相邻节点入队

重复第二、三步,直到队列为空

 

const graph = 
  0: [1, 2],
  1: [2],
  2: [0, 3],
  3: [3]



/*
  深度优先

  访问根节点
  对根节点的没访问过的相邻节点挨个进行深度优先遍历
*/
const visited = new Set()
function dfs (n) 
  console.log(n)
  visited.add(n)
  graph[n].forEach(c => 
    if(!visited.has(c)) 
      dfs(c)
    
  )


dfs(2)


/*
  广度优先

  新建一个队列,把根节点入队
  把队头出队并访问
  把队头的没访问过的相邻节点入队
  重复第二、三步,直到队列为空
*/
function bfs (n) 
  const q = [n]
  visited.add(n)

  if(q.length) 
    const t = q.shift()
    console.log(t)
    
    graph[t].forEach(c => 
      if(!visited.has(c)) 
        q.push(c)
        visited.add(c)
      
    )
  


bfs(2)

1

以上是关于图的深度与广度优先遍历的主要内容,如果未能解决你的问题,请参考以下文章

深度优先遍历与广度优先遍历的区别

图的深度与广度优先遍历

图的遍历:深度优先遍历,广度优先遍历

图的深度优先遍历与广度优先遍历

PHP数据结构-图的遍历:深度优先与广度优先

图的遍历(深度优先与广度优先搜索两种方案)