拓撲排序並且輸出乙個可能的序列

2021-08-20 14:08:55 字數 671 閱讀 1691

如題描述:根據給出的圖輸出乙個可能的拓撲序列。判斷能否進行拓撲排序的關鍵是圖是否存在環。

這裡我們用陣列c的值表示頂點當前的狀態。0代表沒有被訪問過,-1代表正在被訪問,1代表該點及其子孫均被訪問過,並且是不存在的環的點。那麼我們用dfs去遍歷,如果該點在被訪問的過程中再次被訪問,則證明存在環。或者該點沒有被訪問過但是在遞迴訪問它的後繼元素時存在環,也是返回失敗。

看**:

#include#include#include#include#include#define inf 100000000;

using namespace std;

const int maxn = 10000 + 5;

int mp[maxn][maxn];

int c[maxn],topo[maxn],t,n;

bool dfs(int u)

c[u] = 1;//已經訪問過該點及其子孫,並且已返回

topo[--t] = u;//儲存拓撲序列,倒著儲存,便於正著列印

return true;

}bool toposort()

int main()

cout

cout

}

拓撲排序演算法的乙個應用

在visual studio net中,乙個解決方案可以包含多個專案,乙個專案可以引用若干其它專案。編譯的時候,vs會自動確定每個專案的編譯順序。vs究竟是如何計算出這個順序的呢?如果學習過資料結構,可以很容易回答出這個問題 拓撲排序 topological sort 上述介紹抽象,不如用實際案例來...

python實現輸出乙個序列的所有子串行示例

如下所示 def sub arr finish size len a程式設計客棧rr end 1 size end 2 size for index in range end shift index array for j in range size 00,01,10,11 is symmetric...

將排序序列的集合合併成乙個排序序列

您有乙個排序序列的集合,並且想要遍歷所有合併在一起的排序序列。先看如下示例,了解實際需求 import heapq a 1,4,7,10 b 2,5,6,11 for c in heapq.merge a,b print c 124 56710 11值得注意的是,heapq.merge要求所有的輸入...