数据结构 - 图 I (Graph I)

本文详细介绍了图数据结构的基础知识,包括图的定义、类型、度概念、连通性和存储结构如邻接矩阵、邻接表、十字链表及邻接多重表。此外,还提到了图在最小生成树和最短路径问题中的应用。
摘要由CSDN通过智能技术生成

数据结构 - 图 I (Graph I)

返回分类:全部文章 >> 基础知识

本文将介绍图的基础知识,并用C++实现它。

它包含两部分:

  • 编程基础 - 图 I (Graph I) :存储结构(本文)

  • 编程基础 - 图 II (Graph II) :实现完整的邻接矩阵并遍历

在查看本文之前,需要一些数据结构和程序语言的基础。

尤其是“二维数组”、“矩阵”、“矩阵的压缩(matrix)”。一些遍历和应用的内容还需要“栈(stack)”“队列(queue)”“二叉树(binary tree)”等的知识。



1 图的简述 (Introduction)

图的概念很多,我们只说一些重要的,其它可以去查资料。

  • 图:

    • 图是由顶点集合(vertex)以及顶点间的关系集合(edge)组成的一种数据结构;
    • 图是顶点的 有穷非空 集合;
    • 有向图顶点有序,无向图顶点无序;
  • 完全图:

    • 完全无向图: n n n 个顶点的无向图有 n × ( n − 1 ) ÷ 2 n \times (n-1) \div 2 n×(n1)÷2 条边;
    • 完全有向图: n n n 个顶点的有向图有 n × ( n − 1 ) n \times (n-1) n×(n1) 条边;
  • 邻接顶点:同一条边的两个顶点,互相称为邻接顶点;

  • 权( weight 或 cost ):具有数值标识的边;

  • 网络:带有权的图;

  • 顶点的度:该顶点 v v v 的入度和出度之和;

    • 入度:以顶点为终点的边数,记作 I D ( v ) ID(v) ID(v)
    • 出度:以顶点为出发点的边数,记作 O D ( v ) OD(v) OD(v)
  • 路径:从一点到另一点所经过的顶点序列;

    • 路径长度:通过的边数;
    • 简单路径:经过的顶点互不重复;
    • 回路(环):出发点与终点重合;
  • 连通:两个顶点间存在路径,则称这两个顶点连通。

    • 连通图:
      • 无向图中,任意两个顶点都是连通的;
      • 有向图中,路径中任意两个顶点的边必须同向;
    • 强连通图:有向图中,任意两个顶点都存在互通的路径,即双向路径。
    • 生成树:连通图的极小连通子图,如果有 n n n 个顶点,则有 n − 1 n-1 n1 条边

2 图的存储结构 (Storage Structure)

图的基本存储方式有:

  • 邻接矩阵 (Adjacency Matrix)
  • 邻接表 (Adjacency List)
  • 十字链表 (Orthogonal List)
  • 邻接多重表 (Adjacency Multilist)

2.1 邻接矩阵 (Adjacency Matrix)

在图的邻接矩阵表示中:

  • 顶点列表:记录各个顶点的数据信息;
  • 邻接矩阵:表示各个顶点之间的关系(边或权);

其中无向图的邻接矩阵是对称方阵,有向图的邻接矩阵不一定对称。

Tips
无向图的存储可以进行压缩。
特殊矩阵的压缩存储 (Compressed Storage of Special Matrix)

  • 无向图的邻接矩阵,一般只存储与其它结点是否连接,0表示没有连接,1表示右连接。
    例如:

    A
    B
    E
    D
    F
    C

    其矩阵为:

    A B C D E F A 0 1 0 0 1 0 B 1 0 0 1 1 1 C 0 0 0 1 0 1 D 0 1 1 0 0 0 E 1 1 0 0 0 0 F 0 1 1 0 0 0 \begin{matrix} &A &B &C &D &E &F \\[2ex] A &0 &1 &0 &0 &1 &0 \\[2ex] B &1 &0 &0 &1 &1 &1 \\[2ex] C &0 &0 &0 &1 &0 &1 \\[2ex] D &0 &1 &1 &0 &0 &0 \\[2ex] E &1 &1 &0 &0 &0 &0 \\[2ex] F &0 &1 &1 &0 &0 &0 \end{matrix} ABCDEFA010010B100111C000101D011000E110000F011000

  • 有向图的邻接矩阵,分有没有权值:

    • 没有权值依然存储0或者1;
    • 有权值的话存储的是权值,其矩阵也叫网络邻接矩阵,如果无连接用无穷符号( ∞ \infin )表示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值