拓撲排序與關鍵路徑

2021-10-08 03:48:14 字數 2784 閱讀 9939

拓撲排序(只適用於aov網(有向無環圖))

運用 : 事務先後(非唯一)

拓撲排序思路:

選擇乙個入度為 0 的點 並輸出

從aov網中刪除此頂點以及此頂點為起點的所有關聯邊

重複上述兩步,直到不存在入度為0的頂點為止

如果書粗糙頂點數小於aov網中的頂點數,則輸出「有迴路資訊」,否則輸出的頂點序列就是一種拓撲排序

演算法實現:

資料結構: indgr[i] : 頂點i的入度;

stack : 棧

初始化 : top = 0 (棧頂指標置零)

將初始化狀態所有的入度為0的頂點壓棧

i = 0 (計數器)

while( !q.empty() ) ( top > 0 )

i : 棧頂的頂點 v 出棧 ; top - 1; 輸出 v; i++;

ii : for ( v 的每乙個後繼頂點 u )

1. indgr[u]–; u 的入度減一

2. if indgr == 0 頂點 u 入棧

#include

#include

#include

#include

#include

#include

#define n 10001

using

namespace std;

int n,m;

int in[n]

;//節點入度

vector<

int> g[n]

;//g[i]表示i節點所指向的所有其他點

bool

judgetopsort()

//判斷該圖是否可拓撲排序}if

(cnt==n)

//aov網點數等於圖的點數,不存在環,可進行拓撲排序

return

true

;else

//aov網點數等於圖的點數,存在環,不可進行拓撲排序

return

false;}

intmain()

printf

("%s\n"

,judgetopsort()

?"yes"

:"no");

}return0;

}

#include

#include

#include

#include

#include

#include

#define n 10001

using

namespace std;

int n,m;

int in[n]

;//節點入度

int path[n]

;//儲存路徑

vector<

int> g[n]

;//g[i]表示i節點所指向的所有其他點

void

topsort()

//拓撲排序}}

intmain()

topsort()

;for

(int i=

1;i<=n;i++

)printf

("%d "

,path[i]);

printf

("\n");

}return0;

}

#include

#include

#include

#include

#include

#include

#define n 10001

using

namespace std;

int n,m;

int in[n]

;//節點入度

int path[n]

;//儲存路徑

vector<

int> g[n]

;//g[i]表示i節點所指向的所有其他點

void

topsort()

//拓撲排序}}

intmain()

topsort()

;for

(int i=

1;i<=n;i++

)printf

("%d "

,path[i]);

printf

("\n");

}return0;

}

legal or not(hdu-3342):

******** love(hdu-4324):

genealogical tree(poj-2367)(輸出任一條拓撲排序結果):

確定比賽名次(hdu-1285)(輸出字典序最小的拓撲排序結果):

following orders(poj-1270)(按字典序輸出所有拓撲排序結果):

煩人的幻燈片(資訊奧賽一本通-t1395)(拓撲排序思想)

家譜樹(資訊奧賽一本通-t1351)(構造拓撲排序):

獎金(資訊奧賽一本通-t1352)(構造拓撲排序)

cow traffic(poj-3272)(雙向拓撲排序):

ponds(hdu-5438)(拓撲排序刪點+dfs):

病毒(資訊奧賽一本通-t1396)(給出字典序,找出拓撲排序關係):

**座的比賽資格(2019牛客寒假演算法基礎集訓營 day3-b)(拓撲排序求最短路):

sorting it all out(poj-1094)(拓撲排序+差分約束系統):

labeling balls(poj-3687)(拓撲排序+逆向思維):

拓撲排序與關鍵路徑

什麼是拓撲排序 設g v,e 是乙個具有n個頂點的有向圖,v中頂點序列v1,v2,vn,稱為乙個拓撲序列,當且僅當該頂點序列滿足下列條件 若是圖中的邊 或從頂點i到j有一條路徑 則在拓撲序列中頂點i必須排在頂點j之前。在乙個有向圖中找 乙個拓撲序列的過程稱為拓撲排序。拓撲排序步驟 1 從有向圖中選擇...

拓撲排序,關鍵路徑

拓撲排序 對於乙個流程圖,可以用頂點表示活動,弧表示活動間的優先關係,這樣所表示的有向圖稱為頂點表示活動的網,即aov網。在網中,如果頂點i到頂點j有一條有向路徑,或者 i,j 是一條弧,則i是j的前驅,j是i的後繼。aov網中不應該出現環。拓撲排序的思想很簡單,1 在有向圖中選乙個沒有前驅的頂點輸...

拓撲排序 關鍵路徑

功能function description hdoj 2094 開發環境environment dev c 4.9.9.1 技術特點technique 版本version 作者author 可笑痴狂 日期date 20120812 備註notes 策略問題 一 本來想先用字典樹給名字編號,然後用建...