python 数据结构之图的储存方式
参考链接:https://blog.csdn.net/u014281392/article/details/79120406
所描述的图的结构为:

下面介绍不同的储存方式,我想不必详细分别是每个名称都是那种数据来存储的,或是一种,或是两种的组合,这不是再通用的规定约束而来的结果,只是列举了一些灵活的组合而已。
1.邻接集合
邻接集合就是把顶点的邻接点放在一个集合中
# 将节点的编号赋值给相应的节点,方便操作
a, b, c, d, e, f, g, h = range(8)
N = [{'b', 'c', 'd', 'e', 'f'},
{'c', 'e'},
{'d'},
{'e'},
{'f'},
{'c', 'g', 'h'},
{'f', 'h'},
{'f', 'g'}]
列表中每个集合是每个节点邻接点集
在python2.7中,set([1,3])这样表示,set()表示空集合.
在python3之后的版中,set{1,3}表示集合,空集合仍用set()表示.
#查看a的邻接节点有哪些
N[a] {'b', 'c', 'd', 'e', 'f'} # 检查g是否为a的一个邻接节点
'g' in N[a] False # 节点a的度
len(N[a]) 5
2.邻接列表
数据结构和邻接集合差不多,唯一的不同是用列表来储存
# 表示同一个图
a, b, c, d, e, f, g, h = range(8)
N = [ ['b', 'c', 'd', 'e', 'f'],
['c', 'e'],
['d'],
['e'],
['f'],
['c', 'g', 'h'],
['f', 'h'],
['f', 'g'] ]
# 邻接列表表示图结构,与邻接集合的操作相同
3.邻接字典
临界字典与前面两个的不同之处在于,其不仅采用字典来储存,字典是键值对,键值对中的value用来表示边的权值这一信息,能表示出与邻居节点之间的关联性
a, b, c, d, e, f, g, h = range(8)
N = [{'b':2, 'c':1, 'd':3, 'e':9, 'f':4},
{'c':4, 'e':3},
{'d':8},
{'e':7},
{'f':5},
{'c':2, 'g':2, 'h':2},
{'f':1, 'h':6},
{'f':9, 'g':8}] #操作
'e' in N[a]
True 边的权值
N[a]['c'] 1
4.嵌套字典
不用添加序号了
# 以上三种图的表示,都是使用了list类型
# 下面使用嵌套的字典结构
N = {'a':{'b':2, 'c':1, 'd':3, 'e':9, 'f':4},
'b':{'c':4, 'e':3},
'c':{'d':8},
'd':{'e':7},
'e':{'f':5},
'f':{'c':2, 'g':2, 'h':2},
'g':{'f':1, 'h':6},
'h':{'f':9, 'g':8}}
其他的操作和别的结构相同
# a,e之间链接权值
N['a']['e']
4.邻接矩阵
# 邻接矩阵,通过一个二维数组,对应图中的每个节点,使用0,1来表示相关节点是否为当前节点的邻居
# 可以使用嵌套list实现
a, b, c, d, e, f, g, h = range(8) N = [[0, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 0, 1, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 1, 0, 0, 0, 1, 1],
[0, 0, 0, 0, 0, 1, 0, 1],
[0, 0, 0, 0, 0, 1, 1, 0]]
# 检查a, b是否为相邻节点,即检查N[a][b]是否为1
N[a][b] == 1 True
# c节点的度 sum(N[c])
扩展邻接矩阵,实现一个没有自循环,对边加权 、无自循环状态,对角线元素全部为0 、加权,用权值替换真值 、将不存在的边设置一个去穷大的权值(float('inf')),或None
a, b, c, d, e, f, g, h = range(8)
inf = float('inf') N = [[ 0, 2, 1, 3, 9, 4, inf, inf],
[inf, 0, 4, inf, 3, inf, inf, inf],
[inf, inf, 0, 8, inf, inf, inf, inf],
[inf, inf, inf, 0, 7, inf, inf, inf],
[inf, inf, inf, inf, 0, 5, inf, inf],
[inf, inf, 2, inf, inf, 0, 2, 2],
[inf, inf, inf, inf, inf, 1, 0, 6],
[inf, inf, inf, inf, inf, 9, 8, 0]]
# 检查a,b是否互为相邻节点,只要邻接权值不是无穷大
N[a][b] < inf
python 数据结构之图的储存方式的更多相关文章
- python数据结构之图的实现
python数据结构之图的实现,官方有一篇文章介绍,http://www.python.org/doc/essays/graphs.html 下面简要的介绍下: 比如有这么一张图: A -> B ...
- python数据结构之图的实现方法
python数据结构之图的实现方法 本文实例讲述了python数据结构之图的实现方法.分享给大家供大家参考.具体如下: 下面简要的介绍下: 比如有这么一张图: A -> B A ...
- python数据结构之图深度优先和广度优先实例详解
本文实例讲述了python数据结构之图深度优先和广度优先用法.分享给大家供大家参考.具体如下: 首先有一个概念:回溯 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标.但当探索到 ...
- C++图论算法——图的储存方式
使用二维数组邻接矩阵储存图 无向图: 图G 定义图G[101][101],G[i][j]的值表示从结点vi到vj是否有边或弧,若有,取值为1或权值,若无,则取值为0或∞.以下是图G用邻接矩阵表示的列表 ...
- python数据结构之图深度优先和广度优先
首先有一个概念:回溯 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标.但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法 ...
- 利用python+graphviz绘制数据结构关系图和指定目录下头文件包含关系图
作为一名linux系统下的C语言开发,日常工作中经常遇到两个问题: 一是分析代码过程中,各种数据结构互相关联,只通过代码很难理清系统中所有结构体的整体架构,影响代码消化的效率; 二是多层头文件嵌套包含 ...
- Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...
- Python数据结构与算法之图的广度优先与深度优先搜索算法示例
本文实例讲述了Python数据结构与算法之图的广度优先与深度优先搜索算法.分享给大家供大家参考,具体如下: 根据维基百科的伪代码实现: 广度优先BFS: 使用队列,集合 标记初始结点已被发现,放入队列 ...
- Python数据结构与算法设计总结篇
1.Python数据结构篇 数据结构篇主要是阅读[Problem Solving with Python]( http://interactivepython.org/courselib/static ...
随机推荐
- odoo10学习笔记十二:web controller
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189332.html 一:路由 odoo.http.route(route=None, **kw) 装饰器 ...
- 团队项目-Alpha2版本发布
第五次团队作业 序言 所属课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign 作业要求 https://w ...
- JAVA的toString方法的一个小例子
Object是一个抽象类,他有很有方法,其中的toString方法是我们常见的一个方法,我们可以看这段代码 package com.com.day1; public class ToStringTes ...
- [原创]Appium与Appium desktop的区别
1.两者都属于Appium 服务端 2.二者最新版本如下:地址:https://github.com/appium/appium-desktop/releases Appium 服务端支持的:地址:h ...
- 基于 Docker 的 MySQL 主从复制搭建
出处:https://www.jianshu.com/p/ab20e835a73f
- 链接doc命令行的mysql的编码问题
好几次用doc命令行链接mysql数据库进行保存注册等内容,一直出错,要么插入数据库的是乱码问题,要么是没插进去,怎么回事? 在修改了代码(接收中文数据)的基础上(即在代码中用utf-8接收数据) 也 ...
- js将字符串内空格去除的方法
function noSpace(x){ if(x.match(/\s*/g)){ return x.replace(/\s*/g,""); }else{ return x; } ...
- [LeetCode] 105. Construct Binary Tree from Preorder and Inorder Traversal 由先序和中序遍历建立二叉树
Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- [LeetCode] 36. Valid Sudoku 验证数独
Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to th ...
- 爬虫解析库:XPath
XPath XPath,全称 XML Path Language,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言.最初是用来搜寻 XML 文档的,但同样适用于 HTML 文档的 ...