一文带你走进图

139 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言:今天开始学习图~

表示多对多的关系

图是一种数据结构,其中结点可以具有零个或多个相邻元素。

  • 边(edge):两个结点之间的连接
  • 顶点(vertex):结点
  • 路径:
  • 无向图:

image-20220919200615388

  • 有向图

  • 带权图

    image-20220919200731543

图的表示方式

一、邻接矩阵(二维数组)

  • 表示图形中顶点之间相邻关系的矩阵,对于n个顶点的图而言,矩阵是 的row和col表示的是1....n个点

    image-20220919201027586

  • 0:没有直接链接
  • 1:有直接链接

二、邻接表(链表)

  1. 邻接矩阵需要为每个顶点都分配n个边的空间,其实有很多边都是不存在,会造 成空间的一定损失
  2. 邻接表的实现只关心存在的边,不关心不存在的边。因此没有空间浪费,邻接 表由数组+链表组成

image-20220919201256912

图的创建

分析

  1. 存储顶点String 使用ArraList
  2. 保存矩阵 int [ ] [ ] edges

图的遍历

深度优先遍历(DFS)

  1. 深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接 结点作为初始结点,访问它的第一个邻接结点,(每次都在访问完当前结点后首先访问当前结点的第一个邻接结点)
  2. 优先往纵向挖掘深入,而不是对一个结点的 所有邻接结点进行横向访问
  3. 深度优先搜索是一个递归过程