資料結構 拓撲排序

2021-07-16 09:12:31 字數 895 閱讀 4944

設g=(v, e)是乙個具有n個頂點的有向圖,v中的頂點序列v0,v1,v2,…,vn-1如果滿足下列條件:若從vi到vj有一條路徑,則在頂點序列中頂點vi必定在vj之前,這樣的序列稱為拓撲序列。對乙個有向圖構造拓撲序列的過程稱為拓撲排序(topological sort)。

顯然,每乙個可以構造出不止乙個拓撲序列。

拓撲排序的步驟如下:1、在有向圖中選乙個沒有前驅的頂點並輸出;2、從圖中刪除該頂點和所有以它為尾的弧。

重複以上兩個步驟,直至全部頂點均已輸出,或者當前圖中不存在無前驅的頂點為止。後一種情況說明有向圖中存在環。

下圖說明拓撲排序的過程。假設存在多個結點沒有前驅,則任選乙個頂點均可。

首先求所有頂點的入度,然後在執行拓撲排序的過程中,當某個頂點的入度為零(即沒有前驅頂點)時,就將此頂點輸出,同時將該頂點的所有後繼頂點的入度減1,以達到刪除頂點和以它為尾的弧的操作。為了避免重複檢測入度為零的頂點,使用棧存放入度為零的頂點。

const

int maxvertexnum = 20;

struct dnenode ;

template

struct vnode ;

template

class dnalgraph

;template

void dnalgraph::findindegree(int indegree)

}}#include "stack"

template

bool dnalgraph::toposort()

}if (count < vexnum) else

}

資料結構 拓撲排序

aov網路用有向圖的頂點表示活動,頂點之間的有向邊表示活動間的先後關係,這種有向圖稱為頂點表示活動網路,簡稱aov網路。當限制各個活動只能序列進行時,可以將aov網路中所有頂點排列成乙個線性序列,且vi必須在vj之前,我們就稱這個線性序列為拓撲序列,把對aov網構造拓撲序列的操作稱為拓撲排序。拓撲排...

資料結構 拓撲排序

拓撲排序是圖中重要的操作之一,在實際中應用很廣泛.再aov網中,不應該出現有向環路,因為有環意味著某項活動以自己作為先決條件,這樣就進入了死迴圈.因此,對給定的aov網應該首先判定網中是否存在環 檢測的辦法就是對有向圖進行拓撲排序,拓撲排序是指照有向圖給出的次序關係,將圖中頂點排成乙個線性序列,對於...

資料結構之拓撲排序

乙個簡單的求拓撲排序思路是 先找出任意乙個沒有入邊的頂點。然後列印出該頂點,並將它和它的邊一起從圖中刪除。然後,我們對圖的其餘部分採用同樣的方法處理。相應的我們可以定義乙個indegree 入度陣列 儲存所有頂點的入度。具體實現如下 鄰接表 define crt secure no warnings...