拓撲排序 dfs

2021-09-25 12:12:08 字數 678 閱讀 4330

# include# include# includeusing namespace std;

const int maxn=50;

typedef struct nodenode;

typedef struct graphgraph;

vectorss; //存放拓撲序列

bool vis[maxn];

int find(graph g,int i) //尋找對應頂點的索引

{ for(int j=0;j>g.vertexnum>>g.edgenum;

for(int i=0;i>g.vertex[i];

for(int i=0;i>u>>v;

int index_u=find(g,u);

int index_v=find(g,v);

if(index_u==-1||index_v==-1)

{cout<<"不存在該節點"<::iterator in=ss.begin();in!=ss.end();++in)

cout<<*in<<" ";

cout《總結:

(1) dfs每次都再找出度為零的頂點,並將它加入拓撲序列的尾端,然後再回溯.

(2)bfs需要顯示的計算每個頂點的入度,而dfs不需要顯示計算,出度為零的頂點。

(3)二者都可以判斷乙個圖是否是有向無環圖。

拓撲排序 dfs

運用dfs,對乙個有向無回圖 dag 進行拓撲排序。乙個圖的拓撲排序可看成所有頂點沿水平線排列而成的乙個序列,使得所有有向邊均從左指向右。topological sort g call dfs g to compute finishing times f v for each vertex v as...

拓撲排序DFS做法

1 給定乙個有向圖,在拓撲排序中可以 有很多個正確解 由若干小段的 list 組成。2 正確的單序列順序 具體到乙個list之間的元素 3 正確的全序列順序 list彼此之間的順序,可以有多個 e.g.以下圖為例,不論先從哪個點開始 dfs,例如 dfs belt 會得到乙個 belt jacket...

拓撲排序 kahn演算法及dfs的拓撲排序

有個人的家族很大,輩分關係很混亂,請你幫整理一下這種關係。給出每個人的孩子的資訊。輸出乙個序列,使得每個人的後輩都比那個人後列出 sample input 5 0 4 5 1 0 1 0 5 3 0 3 0樣例輸出 sample output 2 4 5 3 1 因為需輸出字典序最小的因而要使用優先...