图的深度优先遍历和广度优先遍历(JavaScript版)

1.深度优先遍历:

算法口诀:

1.访问根节点。

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

实例:

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.广度优先遍历:

 

算法口诀:

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

2.把队头出队并访问。

3.把队头的没访问过的相邻节点挨个入队。

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

实例:


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

const visited = new Set();
visited.add(2);
const q = [2];
while (q.length) {
  const n = q.shift();
  graph[n].forEach(c=> {
    if(!visited.has(c)) {
      q.push(c);
      visited.add(c);
    }
  })
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值