Python图结构--邻接矩阵
来源:互联网 发布:php lvs 编辑:程序博客网 时间:2024/05/29 13:43
图的另一种常见表示法就是邻接矩阵了。
会将每个节点可能的邻居位置排成一行(也就是一个数组,用于对应图中每一个节点),然后用某种值(如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]<infFalse>>> sum(1 for w in w[a] if w<inf)-15
始终记着一点:我们应该根据图的具体用处来选择相关的表示法。
阅读全文
0 0
- Python图结构--邻接矩阵
- 邻接矩阵的图结构
- 图的邻接矩阵存储结构
- 图的存储结构 邻接矩阵
- 图的存储结构 --- 邻接矩阵
- 图的邻接矩阵存储结构
- 图的存储结构-邻接矩阵
- 图的存储结构-邻接矩阵
- 使用邻接矩阵实现图结构
- 使用邻接矩阵实现的图结构
- 数据结构:图的存储结构之邻接矩阵
- 图的存储结构(邻接矩阵)
- 图的存储结构(邻接矩阵法)
- 图的常用存储结构----邻接矩阵
- 图的数组(邻接矩阵)存储结构
- 图的存储结构——邻接矩阵
- 图的邻接矩阵存储结构及算法
- 7.2图的存储结构(邻接矩阵)
- Maven-常用依赖
- CSV文件处理
- 浅谈多个社交账号的登录注册设计
- 【JavaSE学习笔记】计算机基础知识
- Zynq-Linux移植学习笔记之十-u-boot网络配置
- Python图结构--邻接矩阵
- oracle 数据泵导入导出
- linux下/dev/null与/dev/zero
- 蓝桥杯 BEGIN-2 入门训练 序列求和
- SGD求解器的学习率a和遗忘因子u的设置原则
- Dubbo还是Spring-cloud?将来的架构你怎么选,两套方案对比
- php结合redis实现高并发下的抢购、秒杀功能
- junit测试和spring整合
- (一)系统任务(空闲任务、统计任务)与优先级配置