欢迎访问宙启技术站
智能推送

图论基础:理解Python中的Graph()类的邻接表表示法

发布时间:2024-01-04 12:41:55

在图论中,一幅图可以用邻接表表示方法来存储和操作。邻接表是一种数据结构,它以图的顶点和其邻居顶点的列表形式来表示图。

在Python中,我们可以使用Graph()类来实现图的邻接表表示法。

Graph()类主要有以下几个方法:

1. addVertex(vert):向图中添加一个新的顶点vert

2. addEdge(fromVert, toVert):在两个顶点fromVerttoVert之间添加一条边。

3. getVertex(vertKey):返回图中指定顶点vertKey的对象。

4. getVertices():返回图中所有顶点的列表。

5. __iter__():使得图成为可迭代对象,以便我们可以遍历所有顶点。

6. __contains__(n):检查给定的顶点n是否在图中。

7. addEdge(fromVert, toVert, weight):在两个顶点fromVerttoVert之间添加一条带有权重的边。

下面是一个使用邻接表表示法的使用例子:

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没有与之相连的顶点。

使用邻接表表示法可以有效地表示图,并方便地进行各种图算法的操作,如深度优先搜索、广度优先搜索等。