图论基础:理解Python中的Graph()类的邻接表表示法
发布时间:2024-01-04 12:41:55
在图论中,一幅图可以用邻接表表示方法来存储和操作。邻接表是一种数据结构,它以图的顶点和其邻居顶点的列表形式来表示图。
在Python中,我们可以使用Graph()类来实现图的邻接表表示法。
Graph()类主要有以下几个方法:
1. addVertex(vert):向图中添加一个新的顶点vert。
2. addEdge(fromVert, toVert):在两个顶点fromVert和toVert之间添加一条边。
3. getVertex(vertKey):返回图中指定顶点vertKey的对象。
4. getVertices():返回图中所有顶点的列表。
5. __iter__():使得图成为可迭代对象,以便我们可以遍历所有顶点。
6. __contains__(n):检查给定的顶点n是否在图中。
7. addEdge(fromVert, toVert, weight):在两个顶点fromVert和toVert之间添加一条带有权重的边。
下面是一个使用邻接表表示法的使用例子:
class Vertex:
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]
class Graph:
def __init__(self):
self.vertList = {}
self.numVertices = 0
def addVertex(self, key):
self.numVertices += 1
newVertex = Vertex(key)
self.vertList[key] = newVertex
return newVertex
def getVertex(self, key):
if key in self.vertList:
return self.vertList[key]
else:
return None
def __contains__(self, n):
return n in self.vertList
def addEdge(self, f, t, weight=0):
if f not in self.vertList:
nv = self.addVertex(f)
if t not in self.vertList:
nv = self.addVertex(t)
self.vertList[f].addNeighbor(self.vertList[t], weight)
def getVertices(self):
return self.vertList.keys()
def __iter__(self):
return iter(self.vertList.values())
使用上述代码,我们可以创建一个图,并添加顶点和边。例如:
g = Graph()
g.addVertex('A')
g.addVertex('B')
g.addVertex('C')
g.addEdge('A', 'B', 2)
g.addEdge('B', 'C', 3)
for vertex in g:
print(vertex.getId(), "connected to:")
for neighbor in vertex.getConnections():
print(neighbor.getId())
运行上面的代码,输出结果将是:
A connected to: B B connected to: C C connected to:
这表示顶点A与顶点B相连,顶点B与顶点C相连,而顶点C没有与之相连的顶点。
使用邻接表表示法可以有效地表示图,并方便地进行各种图算法的操作,如深度优先搜索、广度优先搜索等。
