1. 程式人生 > >python-資料結構程式碼 圖(鄰接表)

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()) 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()))