Python实现 《算法导论 第三版》中的算法 第22章 基本的图算法

图的表示

图有多种表示方法,比较常用的表示法有邻接链表和邻接矩阵。

根据边的方向,图可以分为无向图和有向图;根据边的权重,图可以分为带权图和不带权图。

对于图 G = ( V , E ) G=(V,E) G=(V,E),其邻接链表表示由一个包含 ∣ V ∣ |V| V条链表的数组 A d j Adj Adj所构成,每个结点有一条链表。对于每个结点 u ∈ V u \in V uV,邻接链表 A d j [ u ] Adj[u] Adj[u]包含所有与结点 u u u之间有边相连的结点 v v v,即 A d j [ u ] Adj[u] Adj[u]包含图 G G G中所有与 u u u邻接的结点(也可以说,该链表里包含指向这些结点的指针)。由于邻接链表代表的是图的边,在伪代码里,我们将数组 A d j Adj Adj看做是图的一个属性,就如我们将边集合 E E E看做是图的属性一样。因此,在伪代码里,我们将看到 G . A d j [ u ] G.Adj[u] G.Adj[u]这样的表示。

对于邻接链表稍加修改,即可以用来表示权重图(带权图)。权重图是图中的每条边都带有一个相关的权重的图。该权重值通常有一个 w : E → R w:E\rightarrow R w:ER的权重函数给出。例如,设 G = ( V , E ) G=(V,E) G=(V,E)为一个权重图,其权重函数为 w w w,我们可以直接将边 ( u , v ) ∈ E (u,v)\in{E} (u,v)E的权重值 w ( u , v ) w(u,v) w(u,v)存放在结点 u u u的邻接链表里。

对于邻接矩阵表示来说,我们通常会将图 G G G中的结点编为 1 , 2 , . . . , ∣ V ∣ 1,2,...,|V| 1,2,...,V,这种编号是任意的。在进行此种编号之后,图 G G G的邻接矩阵表示由一个 ∣ V ∣ × ∣ V ∣ |V|×|V| V×V的矩阵 A = ( a i j ) A=(a_{ij}) A=

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值