数据结构之图的代码实现(使用Python实现)
时间:2020-03-27
本文章向大家介绍数据结构之图的代码实现(使用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啊
参考
原文地址:https://www.cnblogs.com/gtscool/p/12584117.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法