数据结构与算法--图

169 阅读1分钟

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

图是什么

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

JS中没有图,但是可以用Object和Array构建图。图的表示法: 邻接矩阵、邻接表、关联矩阵...

图的常用操作:深度优先遍历、广度优先遍历

深度、广度优先遍历

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

深度优先遍历:尽可能深的搜索图的分支。算法:

  • 1、访问根节点
  • 2、对根节点的没访问过的相邻节点挨个进行深度优先遍历
let visibled = new Set();
const dfs = (n)=> {
    console.log(n);
    visibled.add(n);
    graph[n].forEach(g => {
        if(!visibled.has(g)){
            dfs(g);
        }
    });
}

dfs(2);
//输出结果
2
0
1
3

广度优先遍历:先访问离根节点最近的节点。算法:

  • 1、新建一个队列,把根节点入队
  • 2、把队头出队并访问
  • 3、把队头的没访问过的相邻节点入队
  • 4、重复2、3步,直到队列为空
const bsf = (start) => {
    let visibled = new Set();
    let queue = [start];
    visibled.set(start);
    
    while (queue.length) {
        const n = queue.shift();
        console.log(n);

        graph[n].forEach((g) => {
            if (!visibled.has(g)) {
                queue.push(g);
                visibled.add(g);
            }
        })
    }
}

bsf(2);
//输出结果
2
0
3
1

知识来源: coding.imooc.com/learn/list/…