图的基础知识

图是什么

图的核心部分是顶点,顶点之间的关系是由边来表示的,所以可以衍生出无向图和有向图,然后根据边的性质又可以衍生出加权和不加权,最后整体又可以衍生出强连通,连通和不连通

所以图的定义:图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为G(V,E)

无向图

顶点之间的边没有方向,也就是顶点A和顶点B之间存在一条边,那么A能到B,B能到A;

那么无向图就是由这种边的关系组成的

性质:

  1. ​ 在无向图中,如果任意两个顶点都存在边,那么边的总数为 $\frac{n(n-1)}{2}$

有向图

顶点之间的边存在方向,那么该边称为弧或者有向边,如果顶点A和顶点B之间存在一条从A指向B的弧,那么A能到B,B不能到A

在有向图中,如果任意两个顶点之间都存在方向互为相反的两条弧,则该弧为有向完全图,含有$n(n-1)$条边

<A,D>表示弧,表示顶点A到顶点D之间存在一条从A指向D的有向边,A是弧尾,D是弧头,也就是弧指向的是弧头

网也就是带权的图,权表示一个顶点到另一个顶点的代价

度(TD)

对于无向图中,度表示一个顶点拥有边的条数,假设一个顶点有三条边关联,那么该顶点的度为3

边数是顶点度数和的一半

入度(ID)与出度(OD)

入度和出度是针对有向图说的,入度是以该顶点为弧头的,出度是以该顶点为弧尾的

TD = ID + OD

无向图度数等于边数的两倍

有向图的度数(入度+出度)等于两倍的边数,且有多少入度就有多少出度

图的数据结构

临接矩阵

一个图如果有n个节点,那么临接矩阵的大小是n*n的二维矩阵,对于(i,j)的值不为0,表示顶点i能够到j

邻接表

邻接表 使用 数组 + 链表的方式来表示。 邻接表是从边的数量来表示图,有多少边 才会申请对应大小的链表。

对于数组中的一个元素,对应一个链表,表示该元素中指向链表中对应的所有节点

深度优先搜索

深度优先搜索是认准一个方向进行遍历,直到在这个方向到头了才会停止,停止后会回溯到上一层节点,从上一层的后面节点进行深度搜索,直到所有节点都被访问

DFS框架

  1. 确认递归函数的返回值和参数
  2. 确认递归终止条件
  3. 处理当前节点的方法

广度优先搜索

广度优先搜索是基于起点位置开始,向四周扩散的算法,主要用于解决两点之间最短路径问题

BFS框架

  1. 定义队列和四个方向
  2. 将起始位置放入队列,并且标记为已经使用
  3. 开始遍历放入队列中
  4. 当遍历到终点,该路径为最短路径