(九)数据结构之“图”

81 阅读1分钟

@TOC

图是什么

  • 图是网络结构的抽象模型,是一组由边连接的节点
  • 图可以表示任何二元关系,比如道路、航班.....

.

在这里插入图片描述

  • JS中没有图,但是可以用Object和Array构建图
  • 图的表示法:邻接矩阵、邻接表、关联矩阵...... 在这里插入图片描述 在这里插入图片描述

图的常用操作

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

图的深度/广度优先遍历

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

module.exports = graph;

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

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

深度优先遍历算法口诀

在这里插入图片描述 没访问过的防止陷入死循环

const graph = require('./graph');

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);

广度优先遍历算法口诀

新建一个队列,把根节点入队 把队头出队并访问 把队头的没访问过的相邻节点入队 重复第二、三步,直到队列为空 在这里插入图片描述

const graph = require('./graph');

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

LeetCode:65.有效数字

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 时间复杂度O(n),n为字符串长度,空间复杂度为O(1)

LeetCode:417.太平洋大西洋水流问题

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 时间复杂度O(m * n),空间复杂度 O(m * n)

LeetCode:133.克隆图

在这里插入图片描述 在这里插入图片描述 法一:深度优先遍历 在这里插入图片描述 时间复杂度O(n),n为图的节点数,空间复杂度O(n) 法二:广度优先遍历 在这里插入图片描述 时间复杂度O(n),空间复杂度O(n)

思考题

1、请用图画出你的朋友圈,无需Coding 2、请用图画出你的偶像的人物关系,无需Coding