搜索
您的当前位置:首页正文

python 图的实现

来源:易榕旅网
class Vertex:
    def __init__(self,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):
        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 = 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

    def __contains__(self,n):
        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)
        self.vertList[f].addNeighbor(self.vertList[t],cost)

    def getVertices(self):
        return self.vertList.keys()

    def __iter__(self):
        return iter(self.vertList.values())

if __name__=="__main__":
    g = Graph()
    for i in range(6):
        g.addVertex(i)
    print(g.vertList)
    g.addEdge(0,1,5)
    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)
    for v in g:
        for w in v.getConnections():
            print("( %s, %s)"%(v.getId(),w.getId()))
{0: <__main__.Vertex object at 0x0000021444739F70>, 1: <__main__.Vertex object at 0x0000021444739B20>, 2: <__main__.Vertex object at 0x0000021444739A90>, 3: <__main__.Vertex object at 0x0000021444739A30>, 4: <__main__.Vertex object at 0x00000214447399D0>, 5: <__main__.Vertex object at 0x0000021444739970>}
( 0, 1)
( 0, 5)
( 1, 2)
( 2, 3)
( 3, 4)
( 3, 5)
( 4, 0)
( 5, 4)
( 5, 2)

因篇幅问题不能全部显示,请点此查看更多更全内容

Top