【数据结构】6——图1,概念

数据结构6------图1,概念


文章目录


基本概念

由 顶点(Vertex) 和 边(Edge) 组成的集合。顶点表示图中的点,而边表示顶点之间的连接。记为 G = (V, E)

基本组件包括:

顶点(Vertex):图中的节点或点。每个顶点代表一个对象。

边(Edge):连接两个顶点的线段,表示它们之间的关系。边可以是有向的或无向的。

权重(Weight):有些图的边附带权重,表示边的成本、距离或其他量度。

  • 邻接:有边连接的两个节点的关系

    (i,j)没有先后顺序

    <i,j>有先后顺序

  • 关联:边和相连的节点的关系

  • 顶点的度:关联边的数目

  • 路径(Path):图中从一个顶点到另一个顶点所经过的顶点序列。

  • 简单路径(Simple Path):路径中所有的顶点都不重复。

  • 环(Cycle):路径的起点和终点相同,并且至少经过一个其他顶点。若图中存在环,称为有环图;否则称为无环图。

  • 强连通图(Strongly Connected Graph):对于有向图,如果对于每一对顶点 u 和v,都存在从 u 到v 和从 v 到 u 的路径,则该图是强连通的。

  • 生成树(Spanning Tree):一个无环的子图,包含图中的所有顶点,且是连通的。

  • 生成森林(Spanning Forest):由多个生成树组成的集合,每个生成树包含图中一部分顶点。

  • 子图(Subgraph):图中的一部分顶点和边的集合,这些顶点和边也构成一个图。

图的分类

  • 无向图(Undirected Graph):图中的边没有方向,即如果顶点A与顶点B之间有一条边,那么它表示A和B之间是相互连接的。

  • 有向图(Directed Graph):图中的边有方向,称为弧(Arc)。如果顶点A与顶点B之间有一条有向边,它表示从一个顶点指向另一个顶点的单向连接。

  • 加权图(Weighted Graph):图中的边被赋予了权重(Weight),这些权重可以表示距离、成本、时间等。

  • 无权图(Unweighted Graph):图中的边没有权重,或者所有边的权重相同。

  • 简单图(Simple Graph):图中不包含重复的边,且不允许顶点与自己相连(自环)。

  • 多重图(Multigraph):图中可以有多条边连接相同的一对顶点。

  • 完全图(Complete Graph):图中的每对顶点之间都恰好有一条边。

  • 稀疏图(Sparse Graph):边的数量远小于顶点对的数量。边很少

  • 密集图(Dense Graph):边的数量接近顶点对的最大数量。

  • 连通图(Connected Graph):在无向图中,如果任意两个顶点之间都存在路径,则称该图为连通图。在有向图中,如果任意两个顶点之间都存在方向路径,则称该图为强连通图。

  • 网:边带权值的图

图的表示方法

  • 邻接矩阵(Adjacency Matrix)
    定义:一个二维数组 matrix[i][j] 表示顶点 i 和顶点 j 之间的边。如果 matrix[i][j] 非零,则存在边。
    优点:快速查询是否存在边,适用于稠密图。
    缺点:空间复杂度为 O(V^2),其中 V 是顶点数量,适用于大部分稠密图。

假设有一个无向图,包含 4 个顶点(A, B, C, D)和以下边:

A - B

A - C

B - C

C - D

复制代码
    A  B  C  D
A [ 0, 1, 1, 0 ]
B [ 1, 0, 1, 0 ]
C [ 1, 1, 0, 1 ]
D [ 0, 0, 1, 0 ]
  • 邻接表(Adjacency List)
    定义:每个顶点维护一个列表,列出与其相邻的所有顶点。l链表
    优点:节省空间,适用于稀疏图。
    缺点:查询边的操作较慢,空间复杂度为 O(V + E),其中 E 是边的数量。

    A: B -> C
    B: A -> C
    C: A -> B -> D
    D: C

  • . 边列表(Edge List)
    边列表使用一个列表存储图中的所有边。每个元素是一个元组,表示一条边及其两个端点。

(A, B), (A, C), (B, C), (C, D)


相关推荐
散峰而望6 小时前
【算法竞赛】C++函数详解:从定义、调用到高级用法
c语言·开发语言·数据结构·c++·算法·github
LYFlied8 小时前
【每日算法】LeetCode 416. 分割等和子集(动态规划)
数据结构·算法·leetcode·职场和发展·动态规划
历程里程碑9 小时前
滑动窗口最大值:单调队列高效解法
数据结构·算法·leetcode
量子炒饭大师9 小时前
Cyber骇客的逻辑节点美学 ——【初阶数据结构与算法】二叉树
c语言·数据结构·c++·链表·排序算法
量子炒饭大师9 小时前
Cyber骇客神经塔尖协议 ——【初阶数据结构与算法】堆
c语言·数据结构·c++·二叉树·github·
XLYcmy10 小时前
TarGuessIRefined密码生成器详细分析
开发语言·数据结构·python·网络安全·数据安全·源代码·口令安全
KingRumn10 小时前
DBUS源码剖析之DBusMessage数据结构
linux·服务器·数据结构
youngee1111 小时前
hot100-61电话号码的字母组合
java·数据结构·leetcode
jackyrongvip11 小时前
10个动画介绍递归(用Gemin3生成)
数据结构·递归·gemin3
一条大祥脚12 小时前
26.1.1
数据结构·算法