什么是图?

原文链接:https://note.noxussj.top/?source=helloworld


什么是图?

图是网络结构的抽象模型,是一组由边连接的节点。图可以表示任何二元关系,比如道路、航班等。在 JavaScript 中没有图,但是可以通过 Object 和 Array 来构建图。

常用操作

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

图的表示法

  • 邻接矩阵
  • 邻接表
  • 关联矩阵
  • ...

img

邻接矩阵

ABCDE
A01000
B00110
C00001
D10000
E00010

邻接表

并非仅限于通过对象/数组表示,其他形式也可以。

1{ 2 "A": ["B"], 3 "B": ["C", "D"], 4 "C": ["E"], 5 "D": ["A"], 6 "E": ["D"] 7}

图的深度/广度优先遍历

深度优先遍历

尽可能深的搜索图的分支。

口诀:

  1. 先访问根节点
  2. 对根节点的没访问过的相邻节点挨个进行深度优先遍历(因为相邻节点可能也会指向当前节点)
1const graph = { 2 A: ['B'], 3 B: ['C', 'D'], 4 C: ['E'], 5 D: ['A'], 6 E: ['D'] 7} 8 9const visited = new Set() 10 11const dfs = (n) => { 12 console.log(n) 13 14 visited.add(n) 15 16 graph[n].forEach((item) => { 17 if (!visited.has(item)) { 18 dfs(item) 19 } 20 }) 21} 22 23dfs('A') // A B C E D

广度优先遍历

先访问离根节点最新的节点。

口诀:

  1. 新建一个队列,把根节点入队
  2. 把队头出队并访问
  3. 把队头的没有访问过的相邻节点入队
  4. 重复第 2、3 步直到队列为空
1const graph = { 2 A: ['B'], 3 B: ['C', 'D'], 4 C: ['E'], 5 D: ['A'], 6 E: ['D'] 7} 8 9const bfs = (head) => { 10 const visited = new Set() 11 12 visited.add(head) 13 14 const q = [head] 15 16 while (q.length) { 17 const n = q.shift() 18 19 console.log(n) 20 21 graph[n].forEach((item) => { 22 if (!visited.has(item)) { 23 q.push(item) 24 visited.add(item) 25 } 26 }) 27 } 28} 29 30bfs('A') // A B C D E
点赞
收藏

评论区

加载中...

相关推荐

图数据库简介

概况图数据库(Graphdatabase,GDB)是一个使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。该系统的关键概念是图,它直接将存储中的数据项,与数据节点和节点间表示关系的边的集合相关联。图形数据库应用场景非常

C语言数据结构之图的基本操作

本博文是是博主在学习数据结构图的这一章知识时做的一些总结,代码运行环境:visualstudio2017纯C语言,当然掌握了方法,你也可以试着用其它的语言来实现同样的功能。下面的程序主要实现了对有向图,有向网,无向图,无向网,无向图的深度优先遍历,广度优先遍历,有向无环图的拓扑排序功能等。主要代码实现如下:1pragmao

Python绘制拓扑图(无向图)、有向图、多重图。最短路径计算

前言:数学中,“图论”研究的是定点和边组成的图形。计算机中,“网络拓扑”是数学概念中“图”的一个子集。因此,计算机网络拓扑图也可以由节点(即顶点)和链路(即边)来进行定义和绘制。延伸:无向图两个节点之间只有一条线相连接,且没有方向。 有向图两个节点之间只有一条线相连接,且有方向。方向可以单向,也可以双向。 多重图两个节点之

DFS(深度优先遍历) 以及 BFS(广度优先遍历)

DFS(DeepFirstSearch)概念:    顾名思义,这种遍历方法是以深度为优先进行对图的搜索或者遍历,至于什么是以深度为优先条件,先看下面DFS的基本步骤:   (这是一个递归思想的DFS)    DFS:从当前节点开始,先标记当前节点,再寻找与当前节点相邻,且未标记过的节

PIL包中图像的mode参数

在这里的第一篇。这篇的是为了说明PIL库中图像的mode参数。我做的事情是:1.在本地找了jpg的图,convert为不同mode,将不同的图截取做了个脑图,有个直观的感觉吧。2.把不同mode的图通过np.array()转化为array,打印出array的shape,和array\0,0\的值,便于理解不同mode的

C语言实现数据结构的邻接矩阵

写在前面  图的存储结构有两种:一种是基于二维数组的邻接矩阵表示法。            另一种是基于链表的的邻接表表示法。  在邻接矩阵中,可以如下表示顶点和边连接关系:    !(https://oscimg.oschina.net/oscnet/fe38c2aff8c2a62f0d7ab71f55c1eb1cea