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