数据结构之“图”

225 阅读1分钟

图是什么?

  • 图是网络结构的抽象模型,是一组由边连接的节点

  • 图可以表示任何二元关系 ,比如道路、航班...

  • JS中没有图,但是可以用Object和Array构建图

  • 图的表示法:邻接矩阵、邻接矩阵、关联矩阵...

image.png

image.png

图的常用操作

  • 深度优先遍历
  • 广度优先遍历

什么是深度/广度优先遍历?

  • 深度优先遍历:尽可能深的搜索图的分支
  • 广度优先遍历:先访问离根节点最近的节点

深度优先遍历算法口决

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

image.png coding

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 0 1 3

广度优先遍历算法口决

  • 新建一个队列,把根节点入队
  • 把队头出队并访问
  • 把队头的没访问过的相邻节点入队
  • 重复第二、三步,直到队列为空

image.png coding

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

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

//打印 2 0 3 1