Python图结构--邻接矩阵

图的另一种常见表示法就是邻接矩阵了。

会将每个节点可能的邻居位置排成一行(也就是一个数组,用于对应图中每一个节点),然后用某种值(如True或False)来表示相关节点是否为当前节点的邻居。

与之前一样,其最简单的形式也可以用嵌套list来实现。节点编号依然是从0到V-1。并且为了让矩阵具有更好的可读性,我们将会用1和0来充当所谓的真值(也可用True和False)


>>> a,b,c,d,e,f,g,h=range(8)
>>> N=[[0,1,1,1,1,1,0,0],#a
   [0,0,1,0,1,0,0,0],#b
   [0,0,0,1,0,0,0,0],#c
   [0,0,0,0,1,0,0,0],#d
   [0,0,0,0,0,1,0,0],#e
   [0,0,1,0,0,0,1,1],#f
   [0,0,0,0,0,1,0,1],#g
   [0,0,0,0,0,1,1,0]]#h
>>> N[a][b]
1
>>> sum(N[f])
3

无向图的邻接矩阵应该是一个对称矩阵。

对角线上的元素应该全为假。(图中没有环)

将邻接矩阵扩展成允许对边进行加权处理:在原来存储真值的地方直接存储相关的权值即可。例如,对于边(u,v)来说,我们只需要将N[u][v]处的True替换成w(u,v)即可、我们通常会将一些不存在的边的权值设置为无穷大。

对角线上的值依旧应该全为0,任何节点到自身的距离都应该始终为0。

>>> a,b,c,d,e,f,g,h=range(8)
>>> inf=float('inf')
>>> w=N=[[0,2,1,3,9,4,inf,inf],#a
   [inf,0,4,inf,3,inf,inf,inf],#b
   [inf,inf,0,8,inf,inf,inf,inf],#c
   [inf,inf,inf,0,7,inf,inf,inf],#d
   [inf,inf,inf,inf,0,5,inf,inf],#e
   [inf,inf,2,inf,inf,0,2,2],#f
   [inf,inf,inf,inf,inf,1,0,6],#g
   [inf,inf,inf,inf,inf,9,8,0]]#h
>>> w[a][b]
2
>>> w[c][e]<inf
False
>>> sum(1 for w in w[a] if w<inf)-1
5

始终记着一点:我们应该根据图的具体用处来选择相关的表示法。




  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值