国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

圖論(二)------拓撲排序

2019-11-14 17:43:36
字體:
來源:轉載
供稿:網友

拓撲排序是對有向無圈圖的頂點的一種排序。如果存在一條vi到vj的路徑,則vi排在vj前面。如果圖含有圈,則拓撲排序是不可能的。

拓撲排序的兩種排法:

一個簡單的求拓撲排序的算法是先找出任意一個沒有入邊的頂點,然后顯示出該頂點,并將它和它的邊一起從圖中刪除,對圖的其余部分應用同樣的方法。

首先,對于每個頂點計算它的入度(入邊的數量),將所有入度為0的頂點放入到一個隊列中。當隊列不空時,刪除一個頂點v,并將與v相鄰的所有頂點的入度

減1.只要一個頂點的入度降為0.就把該頂點放入隊列中。

圖的代碼:

class Vertex(object):    def __init__(self,key):        self.id=key        self.adj={}    def addNeighbor(self,nbr,weight=0):        self.adj[nbr]=weight    def getNeighbors(self):        return self.adj.keys()    def getId(self):        return self.id    def getWeight(self,key):        return self.adj[key]class Graph(object):    def __init__(self):        self.vertexlist={}        self.size=0    def addVertex(self,key):        vertex=Vertex(key)        self.vertexlist[key]=vertex        self.size+=1        return vertex    def getVertex(self,key):        return self.vertexlist.get(key)    def __contains__(self,key):        if key in self.vertexlist:            return True        else:            return False    def addEdge(self,f,t,weight=0):        if f not in self.vertexlist:            self.addVertex(f)        if t not in self.vertexlist:            self.addVertex(t)        self.vertexlist[f].addNeighbor(self.vertexlist[t],weight)    def getVertices(self):        return self.vertexlist.keys()    def __iter__(self):        return iter(self.vertexlist.values())

拓撲排序:

def topSort(G):    top=[]    queue=[]    inDegree={}    for v in G:        inDegree[v]=0    for v in G:        for w in v.getNeighbors():            inDegree[w]+=1    for v in inDegree:        if inDegree[v]==0:            queue.append(v)    while queue:        v=queue.pop(0)        top.append(v)        for i in v.getNeighbors():            inDegree[i]-=1            if inDegree[i]==0:                queue.append(i)    return top

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 柯坪县| 卫辉市| 五指山市| 新郑市| 安化县| 安康市| 来凤县| 淄博市| 承德市| 横山县| 仁布县| 房产| 电白县| 钟山县| 屏南县| 金湖县| 佛山市| 嘉善县| 乐陵市| 雅江县| 临城县| 岗巴县| 乌海市| 盐亭县| 新邵县| 农安县| 巴楚县| 葫芦岛市| 镇安县| 苗栗县| 黄平县| 宜宾县| 阿图什市| 玉田县| 长汀县| 三亚市| 墨竹工卡县| 汾西县| 休宁县| 英吉沙县| 仁化县|