python做出代码结构图_数据结构之图的代码实现(使用Python实现)
图的数据结构Python代码实现
使用邻接列表实现.
代码数据结构图示
数据结构文字描述
Graph().self.vertList : {
key:Vertext(){
self.id = key
self.connectedTo{
相邻节点类实例 : 权重
..
..
}
},
key2:Vertext(){
self.id = key
self.connectedTo{
相邻节点类实例 : 权重
..
..
}
}
..
}
代码实现
class Vertext(): # 包含了顶点信息,以及顶点连接边
def __init__(self,key):#key表示是添加的顶点
self.id = key
self.connectedTo = {} # 初始化临接列表
def addNeighbor(self,nbr,weight=0):# 这个是赋值权重的函数
self.connectedTo[nbr] = weight
def __str__(self):
return str(self.id)+ ' connectedTo: '+str([x.id for x in self.connectedTo])
def getConnections(self): #得到这个顶点所连接的其他的所有的顶点 (keys类型是class)
return self.connectedTo.keys()
def getId(self): # 返回自己的key
return self.id
def getWeight(self,nbr):#返回所连接ner顶点的权重是多少
return self.connectedTo[nbr]
'''
Graph包含了所有的顶点
包含了一个主表(临接列表)
'''
class Graph():# 图 => 由顶点所构成的图
'''
存储图的方式是用邻接表实现的.
数据结构: {
key:Vertext(){
self.id = key
self.connectedTo{
相邻节点类实例 : 权重
..
..
}
}
..
..
}
'''
def __init__(self):
self.vertList = {} # 临接列表
self.numVertices = 0 # 顶点个数初始化
def addVertex(self,key):# 添加顶点
self.numVertices = self.numVertices + 1 # 顶点个数累加
newVertex = Vertext(key) # 创建一个顶点的临接矩阵
self.vertList[key] = newVertex
return newVertex
def getVertex(self,n):# 通过key查找定点
if n in self.vertList:
return self.vertList[n]
else:
return None
def __contains__(self,n):# transition:包含 => 返回所查询顶点是否存在于图中
#print( 6 in g)
return n in self.vertList
def addEdge(self,f,t,cost=0): # 添加一条边.
if f not in self.vertList: # 如果没有边,就创建一条边
nv = self.addVertex(f)
if t not in self.vertList:# 如果没有边,就创建一条边
nv = self.addVertex(t)
if cost == 0:# cost == 0 代表是没有传入参数,而使用的默认参数0,即是是无向图
self.vertList[f].addNeighbor(self.vertList[t],cost) # cost是权重.无向图为0
self.vertList[t].addNeighbor(self.vertList[f],cost)
else:#
self.vertList[f].addNeighbor(self.vertList[t],cost) # cost是权重
def getVertices(self):# 返回图中所有的定点
return self.vertList.keys()
def __iter__(self): #return => 把顶点一个一个的迭代取出.
return iter(self.vertList.values())
#
# -------------------------------------------------
# 以下是测试数据.可删除
# -------------------------------------------------
#
g = Graph()
# for i in range(6):
# g.addVertex(i)
# print(g.vertList)
'''
# a = g.vertList[0]
# print(a.connectedTo)
'''
g.addEdge(0,5,2)
g.addEdge(1,2,4)
g.addEdge(2,3,9)
g.addEdge(3,4,7)
g.addEdge(3,5,3)
g.addEdge(4,0,1)
g.addEdge(5,4,8)
g.addEdge(5,2,1)
print(g.getVertices())
# vertList = { key :VertextObject}
# VertextObject = ||key = key, connectedTo = {到达节点:权重}|| => |||| 表示的是权重的意思
# print(g)
for v in g: # 循环类实例 => return -> g = VertextObject的集合 v = VertextObject
for w in v.getConnections(): # 获得类实例的connectedTO
# print(w)
print("({},{}:{})".format(v.getId(),w.getId(),v.getWeight(w))) ## 为什么会是这样 => 因为这个时候v就是class啊
参考
python做出代码结构图_数据结构之图的代码实现(使用Python实现)相关推荐
- python基础刷题_数据结构与算法LeetCode刷题(Python)
参考资料: 一.链表 1. 链表的必备知识要点(包括基础知识.刷题中使用的STL等知识) 2. 链表逆序(LeetCode 92 ,206. Reverse Linked List 1,2) 3. ...
- python 快速排序 详解_数据结构与算法:快速排序(原理讲解+python实现)
快速排序 快速排序是一种基于分治法(Divide and Conquer)的排序算法 它之所以称为快速排序是因为它的平均时间复杂度为O(nlogn),最坏情况下是O(n2) 但是这样的情况不常见 一般 ...
- python绘制基因结构图_使用Python绘制GWAS分析中的曼哈顿图和QQ图
[前言]其实这篇文章是为了简单介绍一下geneview的用法,它是一个Python高级库,建立在matplotlib的基础之上,专门用于基因组数据的可视化,目的是为了使创建高大上(精致)的基因组数据图 ...
- python论文排版格式_一张图总结科研必备的软件清单,妈妈再也不用担心我的工作了...
好的工具可以让工作事半功倍,那么哪些软件有助于提高学习效率,促使成果尽快产出? 废话不多说,先上一张图,它归纳了科研必备软件工具,具体说明见下文. 1.入门配置三件套 Word, excel, ppt ...
- python生成词云_词云制作没那么难,Python 10 行代码就实现了!
欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信"学习资料"可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 写在前面 想必大家有一个问 ...
- python怎么重启内核_解决jupyter运行pyqt代码内核重启的问题
在jupyter notebook或者是 Qtconsole下编译运行一个简单的pyqt程序,总是报错: The kernel appears to have died. It will restar ...
- thonny和python有什么关系_学习用 Thonny 写代码: 一个面向初学者的Python IDE
学习编程很难.即使当你最终怎么正确使用你的冒号和括号,但仍然有很大的可能你的程序不会如果所想的工作. 通常,这意味着你忽略了某些东西或者误解了语言结构,你需要在代码中找到你的期望与现实存在分歧的地方. ...
- python十大重点_你见过的最全面的 Python 重点
由于总结了太多的东西,所以篇幅有点长,这也是我'缝缝补补'总结了好久的东西. Py2 VS Py3print成为了函数,python2是关键字 不再有unicode对象,默认str就是unicode ...
- python中国地图程序设计_神级程序员教你用Python如何画一个中国地图!(好好玩)...
为什么是Python 先来聊聊为什么做数据分析一定要用 Python 或 R 语言.编程语言这么多种, Java , PHP 都很成熟,但是为什么在最近热火的数据分析领域,很多人选择用 Python ...
- python与材料计算公式_《从问题到程序:用Python学编程和计算》——2.11 补充材料-阿里云开发者社区...
本节书摘来自华章计算机<从问题到程序:用Python学编程和计算>一书中的第2章,第2.11节,作者 裘宗燕,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2 ...
最新文章
- 性能比GPU高100倍!华人教授研发全球首个可编程忆阻器AI计算机
- MySQL数据库-理论基础
- Mysql无限重启问题可能原因
- C语言杂谈:指针与数组 (上) (转)
- springmv的执行流程是什么
- python插入排序_从Python看排序:插入排序
- ribbon设置权重_spring cloud gateway+ribbon 组合指定版本权重分流(简易灰度发布实现)...
- 分布式事务解决方案之TCC方案
- 超标量处理器设计 姚永斌 第2章 Cache 摘录
- 基于IOS的仿微博系统
- 开源的项目管理软件——OpenProj
- 《淘宝技术这十年》读书总结
- word文档怎么转换成jpg格式图片
- 关于Asterisk的传真以及ForIP的概念
- 顶尖电子秤ls6恢复出厂_顶尖LS6(X)条码秤调试教程
- NETSDK1045 当前 .NET SDK 不支持将 .NET 6.0 设置为目标。请将 .NET 5.0 或更低
- 1124 Raffle for Weibo Followers (20 分)
- 以太坊数字资产的发行和流通:以太坊上的数字资产定义、ERC 20代币合约标准、ERC 20标准接口、ERC 721代币合约标准、
- 消除Word文档被加密、限制编辑的解决方法
- ioctl(sock, SIOCGIFHWADDR, ifr)获取网卡mac地址
热门文章
- 对于传统scnece-classfication的分析
- 线程上下文类加载器(Thread Context ClassLoader)
- Spring AOP原理分析(二)--@EnableAspectJAutoProxy功能分析
- 设计模式 (十四) Cglib动态代理模式
- Java 注解Annotation总结二
- 【第43题】【062题库】2019年OCP认证062考试新题
- ASP.NET 使用application和session对象写的简单聊天室程序
- 探究requestDisallowInterceptTouchEvent失效的原因
- [转]响应式web设计之CSS3 Media Queries
- Linux时间操作(time、gettimeofday)