我们可以将图看作是一种从链表拓展而来的 数据结构,相较于 线性关系(链表) 和 分治关系(树) ,网络关系(图) 的自由度更高,从而更为复杂。
图的三种分类标准
一、根据边是否具有方向,可以分为「无向图」和「有向图」
注:在无向图中,边表示两顶点之间的“双向”连接关系,例如微信或 QQ 中的“好友关系”。
在有向图中,边具有方向性,即 𝐴 → 𝐵 和 𝐴 ← 𝐵 两个方向的边是相互独立的,例如微博或抖音上 的“关注”与“被关注”关系。
二、 根据所有顶点是否连通,可分为「连通图」和「非连通图」
三、根据边是否添加 “权重” ,可分为「无权图」和「有权图」
图的两种表示方式
一、邻接矩阵
设图的顶点数量为 𝑛 ,「邻接矩阵」使用一个 𝑛 × 𝑛 大小的矩阵来表示图,每一行(列) 代表一个顶点,矩阵元素代表边,用 1 或 0 表示两个顶点之间是否存在边。
邻接矩阵具有以下特性:
‧ 顶点不能与自身相连,因此邻接矩阵主对角线元素没有意义。
‧ 对于无向图,两个方向的边等价,此时邻接矩阵关于主对角线对称。
‧ 将邻接矩阵的元素从 1 和 0 替换为权重,则可表示有权图。
二、邻接表
设图的顶点数量为 𝑛 ,「邻接表」使用 𝑛 个链表来表示图,链表节点表示顶点。第 𝑖 条链表对应顶点 𝑖 ,其中存储了 该顶点的所有邻接顶点(即与该顶点相连的顶点)。