数据结构小记【Python/C++版】——图结构篇

本文详细介绍了图的基本概念,包括顶点、边、权重、邻接关系、路径、度数等,并区分了无向图、有向图、连通图、子图和加权图。还探讨了邻接矩阵和邻接表这两种常见的图表示方法,以及广度优先遍历和深度优先遍历的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,基础概念

1.图的简介

图没有起始位置和终止位置,是由顶点和边组成的一种非线性数据结构。

2.图结构的常见概念

(先大概了解一下,后面可以结合图示对照看看): 

顶点(Vertex/Node):顶点又称节点,是图的基础部分。

边(Edge):两个顶点之间的连线。

权重(Weight):边上可以附带的权重大小,用来表示从一个顶点到另一个顶点的成本。

相邻(Adjacency):同一条边两端的顶点被称为相邻或者邻接。

路径(Path):由边连接的顶点组成的序列。

度(Degree):连接到一个顶点的边的数量。

入度(Indegree):按传入方向连接到顶点的有向边的总数。

出度(Outdegree):按传出方向连接到顶点的有向边的总数。

3.图的等式表示

图结构可以用等式表示:G=(V, E)

G是图结构的抽象表示。

V是图中的顶点集合,一般用数组存储,所以V常见于顶点数组。

E是相邻顶点的集合,E中的元素也表示他们连接而成的边。例如E中的一个元素是(u, v),表示顶点u和顶点v连接成的边。如果是有方向的边,(u, v)和(v, u)表示的是不同方向的两条边,如果是无方向的边,则(u, v)和(v, u)表示的是同一条边。例如下图中的(1, 2)和(2, 1)表示的是相同的边。

该图有一组顶点V={1,2,3,4,5}和一组边E={(1,2),(1,3),(2,3),(2,4),(2,5),(3,5),(4,5)}。

二,常见的图结构分类

a.无向图

任意两个顶点之间的边不带方向。

b.有向图

任意两个顶点之间的边区分方向。

c.连通图

图数据结构的一个顶点与任何其他顶点之间存在可以到达的路径、

d.子图

顶点和边的组合是另一个图的子集

e.加权图

每条边都有一个权重,表示遍历该边的成本

三,图的常见表示方式

基于二维数组的表示方式——邻接矩阵(Adjacency Matrix)

基于链表的表示方式——邻接表(Adjacency List)

1.邻接矩阵

邻接矩阵用于显示哪些节点彼此相邻。

矩阵的行和列都是图的顶点列表,矩阵中不为0的地方表示顶点之间互相连接,即矩阵中不为0的地方表示边。

a.无向图的邻接矩阵
如果顶点a和顶点b之间存在边:AdjMatrix(A, B)=AdjMatrix(B, A)=1

b.有向图的邻接矩阵

如果存在顶点b到顶点a的边:AdjMatrix(B, A)=1

如果不存在顶点a到顶点b的边:AdjMatrix(A, B)=0

c.加权无向图的邻接矩阵

如果顶点a和顶点b之间存在边,且边的权重为3:AdjMatrix(A, B)=AdjMatrix(B, A)=3

2.邻接表

通俗说就是每个顶点专门有一个列表来记录自己有哪些邻居,这个列表常用链表结构来实现。此结构维护了两张表:

1.包含所有顶点的数组(主表)。

2.每个顶点单独对应的链表,此链表包含了与此顶点相邻的所有顶点集合。

a.无向图的邻接表

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员与背包客_CoderZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值