本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言:今天开始学习图~
图
表示多对多的关系
图是一种数据结构,其中结点可以具有零个或多个相邻元素。
- 边(edge):两个结点之间的连接
- 顶点(vertex):结点
- 路径:
- 无向图:
-
有向图
-
带权图
图的表示方式
一、邻接矩阵(二维数组)
-
表示图形中顶点之间相邻关系的矩阵,对于n个顶点的图而言,矩阵是 的row和col表示的是1....n个点
- 0:没有直接链接
- 1:有直接链接
二、邻接表(链表)
- 邻接矩阵需要为每个顶点都分配n个边的空间,其实有很多边都是不存在,会造 成空间的一定损失
- 邻接表的实现只关心存在的边,不关心不存在的边。因此没有空间浪费,邻接 表由数组+链表组成
图的创建
分析
- 存储顶点String 使用ArraList
- 保存矩阵 int [ ] [ ] edges
图的遍历
深度优先遍历(DFS)
- 深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接 结点作为初始结点,访问它的第一个邻接结点,(每次都在访问完当前结点后首先访问当前结点的第一个邻接结点)
- 优先往纵向挖掘深入,而不是对一个结点的 所有邻接结点进行横向访问
- 深度优先搜索是一个递归过程