图的数据结构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实现)相关推荐

  1. python基础刷题_数据结构与算法LeetCode刷题(Python)

    参考资料: 一.链表 1.  链表的必备知识要点(包括基础知识.刷题中使用的STL等知识) 2.  链表逆序(LeetCode 92 ,206. Reverse Linked List 1,2) 3. ...

  2. python 快速排序 详解_数据结构与算法:快速排序(原理讲解+python实现)

    快速排序 快速排序是一种基于分治法(Divide and Conquer)的排序算法 它之所以称为快速排序是因为它的平均时间复杂度为O(nlogn),最坏情况下是O(n2) 但是这样的情况不常见 一般 ...

  3. python绘制基因结构图_使用Python绘制GWAS分析中的曼哈顿图和QQ图

    [前言]其实这篇文章是为了简单介绍一下geneview的用法,它是一个Python高级库,建立在matplotlib的基础之上,专门用于基因组数据的可视化,目的是为了使创建高大上(精致)的基因组数据图 ...

  4. python论文排版格式_一张图总结科研必备的软件清单,妈妈再也不用担心我的工作了...

    好的工具可以让工作事半功倍,那么哪些软件有助于提高学习效率,促使成果尽快产出? 废话不多说,先上一张图,它归纳了科研必备软件工具,具体说明见下文. 1.入门配置三件套 Word, excel, ppt ...

  5. python生成词云_词云制作没那么难,Python 10 行代码就实现了!

    欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信"学习资料"可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 写在前面 想必大家有一个问 ...

  6. python怎么重启内核_解决jupyter运行pyqt代码内核重启的问题

    在jupyter notebook或者是 Qtconsole下编译运行一个简单的pyqt程序,总是报错: The kernel appears to have died. It will restar ...

  7. thonny和python有什么关系_学习用 Thonny 写代码: 一个面向初学者的Python IDE

    学习编程很难.即使当你最终怎么正确使用你的冒号和括号,但仍然有很大的可能你的程序不会如果所想的工作. 通常,这意味着你忽略了某些东西或者误解了语言结构,你需要在代码中找到你的期望与现实存在分歧的地方. ...

  8. python十大重点_你见过的最全面的 Python 重点

    由于总结了太多的东西,所以篇幅有点长,这也是我'缝缝补补'总结了好久的东西. Py2 VS Py3print成为了函数,python2是关键字 不再有unicode对象,默认str就是unicode ...

  9. python中国地图程序设计_神级程序员教你用Python如何画一个中国地图!(好好玩)...

    为什么是Python 先来聊聊为什么做数据分析一定要用 Python 或 R 语言.编程语言这么多种, Java , PHP 都很成熟,但是为什么在最近热火的数据分析领域,很多人选择用 Python ...

  10. python与材料计算公式_《从问题到程序:用Python学编程和计算》——2.11 补充材料-阿里云开发者社区...

    本节书摘来自华章计算机<从问题到程序:用Python学编程和计算>一书中的第2章,第2.11节,作者 裘宗燕,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2 ...

最新文章

  1. 性能比GPU高100倍!华人教授研发全球首个可编程忆阻器AI计算机
  2. MySQL数据库-理论基础
  3. Mysql无限重启问题可能原因
  4. C语言杂谈:指针与数组 (上) (转)
  5. springmv的执行流程是什么
  6. python插入排序_从Python看排序:插入排序
  7. ribbon设置权重_spring cloud gateway+ribbon 组合指定版本权重分流(简易灰度发布实现)...
  8. 分布式事务解决方案之TCC方案
  9. 超标量处理器设计 姚永斌 第2章 Cache 摘录
  10. 基于IOS的仿微博系统
  11. 开源的项目管理软件——OpenProj
  12. 《淘宝技术这十年》读书总结
  13. word文档怎么转换成jpg格式图片
  14. 关于Asterisk的传真以及ForIP的概念
  15. 顶尖电子秤ls6恢复出厂_顶尖LS6(X)条码秤调试教程
  16. NETSDK1045 当前 .NET SDK 不支持将 .NET 6.0 设置为目标。请将 .NET 5.0 或更低
  17. 1124 Raffle for Weibo Followers (20 分)
  18. 以太坊数字资产的发行和流通:以太坊上的数字资产定义、ERC 20代币合约标准、ERC 20标准接口、ERC 721代币合约标准、
  19. 消除Word文档被加密、限制编辑的解决方法
  20. ioctl(sock, SIOCGIFHWADDR, ifr)获取网卡mac地址

热门文章

  1. 对于传统scnece-classfication的分析
  2. 线程上下文类加载器(Thread Context ClassLoader)
  3. Spring AOP原理分析(二)--@EnableAspectJAutoProxy功能分析
  4. 设计模式 (十四) Cglib动态代理模式
  5. Java 注解Annotation总结二
  6. 【第43题】【062题库】2019年OCP认证062考试新题
  7. ASP.NET 使用application和session对象写的简单聊天室程序
  8. 探究requestDisallowInterceptTouchEvent失效的原因
  9. [转]响应式web设计之CSS3 Media Queries
  10. Linux时间操作(time、gettimeofday)