Java数据结构:图(图论知识中一些概念的简单概括)

5. 图

图由顶点和边组成。

G(V, E):其中,G表示图,V表示顶点的集合,E表示边的集合

5.1 基本概念

无向图和有向图

  • 无向图:边没有方向,代表双方有关系/联系,可以理解为双箭头
  • 有向图:边有方向,单项的关系/联系,可以理解为单箭头

无权图和有权图

  • 无权图:只关注是否有关系,不关心关系的强度
  • 有权图:关注是否有关系,也关心强度,如表示两个顶点的距离

顶点

可以理解为图中的结点,图至少由一个顶点

边表示顶点间的联系,有边相连的两点成为邻接关系

度为一个顶点包含多少条边

有向图中:

  • 入度:指向该顶点的边的个数
  • 出度:由该顶点出发的边的个数

图的存储

邻接矩阵存储

邻接矩阵将图用二维矩阵的方式存储。

矩阵中的非零点的索引代表第i个顶点和第j个顶点有关系关系权值为该数值,既 A[i][j]=n

  • 无权图中权值都为1
  • 无向图的邻接矩阵是对称矩阵,因为当 A[i][j]=n时,A[j][i]必然也为 n

优缺点:

  • 优点:简单直接,容易获取两节点间的关系
  • 缺点:占用空间较大

邻接表存储

邻接表是针对邻接矩阵占用空间大问题的改进。

邻接表使用链表存储某个顶点的所有相邻顶点,形成一个由该点(head)开始,存储了所有相邻顶点的单链表:

如:顶点vi**(head)**  ->  邻接点vj1  ->  邻接点vj2  ->  …
  • 有向图的邻接表由边出发的点指向边指向的点
  • 有向图的元素个数是是无向图的一半,与边的个数相同

图的搜索

广度优先搜索

使用队列搜索,初始将源顶点放入队列,把未访问的后继顶点放入队列,循环获取后继顶点,直至队列为空

广度优先搜索的图文解析

深度优先搜索

从源顶点开始走到没有后继结点,回溯到上一顶点,继续搜索(最大路的思想)

深度优先搜索的图文解析

posted @ 2022-03-22 17:57  chachan53  阅读(254)  评论(0编辑  收藏  举报