小魚要學數據結構與算法(基於python)—Day22圖及其抽象數據類型實現

在這裏插入圖片描述

一、知識概覽

1.1 概念及定義

圖的概念及定義

1.2 圖抽象數據類型實現

圖抽象數據類型

1.3圖的應用

下節再詳細展開應用部分
在這裏插入圖片描述

二、代碼實現

2.1 實現

#ADT Graph的實現

#實現
class Vertex:
    def __init__(self,key):
        self.id=key
        self.connectedTo={}
    def addNeighbor(self,nbr,weight):
        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):#通過key查找頂點
        if n in self.vertList:
            return self.vertList[n]
        else:
            return None
    def __contains__(self, item):
        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())

2.2 實例

實例
g=Graph()
for i in range(6):
    g.addVertex(i)
print(g.vertList)
g.addEdge(0,1,5)
for v in g:
    for w in v.getConnection():
        print("%s,%s"%(v.getId(),w.getId()))

輸出

0,1
0,5
1,2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章