322 图的实现1 #
- 定义顶点类
- 定义图类
- 图的顶点相关功能
定义顶点类 #
创建两个类Graph和Vertex。顶点类Vertex的每个顶点通过字典connectTo来跟踪它连接的顶点和每个边的权重,顶点类的定义如下:
class Vertex:
# 包含5个基本操作,添加某个顶点连接,获取所有连接,获取顶点自身,获取某边权重,打印所有信息
def __init__(self, key):
self.id = key
self.connectedTo = {}
def addNeighbor(self, nbr, weight=0):
self.connectedTo[nbr] = weight
def getConnections(self):
return self.connectedTo.keys()
def getId(self):
return self.id
def getWeight(self, nbr):
return self.connectedTo[nbr]
def __str__(self):
return str(self.id) + ' connectedTo: ' + str([x.id for x in self.connectedTo])
定义图类 #
一个图是顶点和边的集合,边由顶点的连接关系定义,所以图类最基本含义顶点的集合,另一个值表示顶点的数目
class Graph:
def __init__(self):
self.vertList = {}
self.numVertices = 0
图的顶点相关功能 #
图至少需要能够添加顶点和获取顶点,每次添加顶点都将顶点数目增加1,然后生成顶点类,再将顶点类加入图的字典中
class Graph:
def __init__(self):
self.vertList = {}
self.numVertices = 0
def addVertex(self, key):
self.numVertices = self.numVertices + 1
newVertex = Vertex(key)
self.vertList[key] = newVertex
return newVertex
def getVertex(self, n):
if n in self.vertList:
return self.vertList[n]
else:
return None
小结 #
习题 #
- 详细描述一下顶点类个方法的作用
- 图为什么采用邻接表实现而不是邻接矩阵?