图的基本概念
图(Graph)是由顶点(Vertex)和边(Edge)组成的非线性数据结构,用于表示实体(顶点)及其关系(边)。数学上表示为 ( G = (V, E) ),其中 ( V ) 是顶点集合,( E ) 是边集合。
图的分类
-
无向图
边没有方向,表示为 ( (u, v) ),表示顶点 ( u ) 和 ( v ) 双向连通。例如社交网络中的好友关系。循序颠倒不影响表达。
-
有向图
边有方向,表示为 ( < u, v > ),表示从顶点 ( u ) 指向 ( v ) 的单向关系。例如网页超链接。这样的表示方式具有方向性,不能颠倒方向,颠倒方向意思相反。

-
加权图
边附带权值,表示关系的强度或成本。例如地图中城市间的距离。就是在指向路径多了距离的数值量。
-
稀疏图与稠密图
稀疏图边数远少于最大可能边数,稠密图边数接近最大可能边数。
度
在无向图中,节点的度(Degree)是指与该节点相连的边的数量。例如,若节点A与节点B、C、D相连,则节点A的度为3。自环(节点连接到自身的边)通常会被计算两次(即贡献2度)。
在有向图中,节点的度分为入度(In-degree)和出度(Out-degree)。入度是指指向该节点的边的数量,而出度是指从该节点出发的边的数量。例如,若节点A有两条边指向其他节点,一条边指向自身,则其出度为2(自环通常不计入出度),入度为1(自环通常计入入度)。
度的计算方法
对于无向图,可以通过邻接矩阵或邻接表计算节点的度。邻接矩阵中,节点i的度为第i行或第i列非零元素的个数(对于无自环图)。邻接表中,节点i的度是其邻接链表中的元素数量。
对于有向图,入度是邻接矩阵中第i列非零元素的个数,而出度是第i行非零元素的个数。邻接表中,出度是节点i邻接链表的长度,入度需要遍历所有邻接链表统计指向节点i的次数。
度的性质
- 无向图中,所有节点度的和等于边数的两倍(握手定理)。
- 有向图中,所有节点的入度和等于出度和,且等于边数。
- 任何图中,奇数度节点的数量为偶数(无向图)。
图的遍历方式
深度遍历:
深度遍历原则就是优先遍历,如果遇到死胡同或者遇到已经走过的位置就停止遍历,退回到最后遇到的岔路

以A为头节点
输出结果:ABECFD
以B为头节点
输出结果:BECADF
以C为头节点:
输出结果:CABEFD
广度遍历:
广度遍历原则遇到岔路优先遍历各个岔路口,让后在从最开始遍历的位置开始遍历,遇到岔路口就继续刚刚操作。

以A为头节点
输出结果:ABCDEF
以B为头节点
输出结果:BEACDF
以C为头节点:
输出结果:CAEBDF
图的表示方法
邻接矩阵
矩阵类似二维的数组表达方式,而对于邻接矩阵来说就是把对应的节点放入对应的位置,横轴和纵轴的方向都一一对应的放入节点。类似下面。在非加权图中,一般通过1和0表示边的存在,因为不存在A到A,B到B......所以对应的位置都为0,而在加权图中,就会用权的数值和无限来表示边的存在。(无线取对应的类型的最大整数,char 128,short 32768)

矩阵图

矩阵示例图及图的表示图
邻接表
我们会发现在邻接矩阵如果在稀疏图的时候,邻接矩阵会存现很多的空缺的位置导致空间浪费。所以就出现邻接表来减少空间浪费。
邻接表的原理是通过每一个节点打印出对应存储的边。


感谢观看!
悠仁さん