如何求拓撲排序的所有種類及種類數

2022-08-17 15:27:21 字數 2654 閱讀 2762

輸入:第一行為點數n和各連線邊數m

接下來m行寫某一條有向邊的起始點和終止點

輸出:拓撲排序所有方案和方案種數

sample input

9 10

0 11 3

2 43 2

3 65 4

6 57 5

8 68 7

sample output

0 1 3 2 8 6 7 5 4

0 1 3 2 8 7 6 5 4

0 1 3 8 2 6 7 5 4

0 1 3 8 2 7 6 5 4

0 1 3 8 6 2 7 5 4

0 1 3 8 6 7 2 5 4

0 1 3 8 6 7 5 2 4

0 1 3 8 7 2 6 5 4

0 1 3 8 7 6 2 5 4

0 1 3 8 7 6 5 2 4

0 1 8 3 2 6 7 5 4

0 1 8 3 2 7 6 5 4

0 1 8 3 6 2 7 5 4

0 1 8 3 6 7 2 5 4

0 1 8 3 6 7 5 2 4

0 1 8 3 7 2 6 5 4

0 1 8 3 7 6 2 5 4

0 1 8 3 7 6 5 2 4

0 1 8 7 3 2 6 5 4

0 1 8 7 3 6 2 5 4

0 1 8 7 3 6 5 2 4

0 8 1 3 2 6 7 5 4

0 8 1 3 2 7 6 5 4

0 8 1 3 6 2 7 5 4

0 8 1 3 6 7 2 5 4

0 8 1 3 6 7 5 2 4

0 8 1 3 7 2 6 5 4

0 8 1 3 7 6 2 5 4

0 8 1 3 7 6 5 2 4

0 8 1 7 3 2 6 5 4

0 8 1 7 3 6 2 5 4

0 8 1 7 3 6 5 2 4

0 8 7 1 3 2 6 5 4

0 8 7 1 3 6 2 5 4

0 8 7 1 3 6 5 2 4

8 0 1 3 2 6 7 5 4

8 0 1 3 2 7 6 5 4

8 0 1 3 6 2 7 5 4

8 0 1 3 6 7 2 5 4

8 0 1 3 6 7 5 2 4

8 0 1 3 7 2 6 5 4

8 0 1 3 7 6 2 5 4

8 0 1 3 7 6 5 2 4

8 0 1 7 3 2 6 5 4

8 0 1 7 3 6 2 5 4

8 0 1 7 3 6 5 2 4

8 0 7 1 3 2 6 5 4

8 0 7 1 3 6 2 5 4

8 0 7 1 3 6 5 2 4

8 7 0 1 3 2 6 5 4

8 7 0 1 3 6 2 5 4

8 7 0 1 3 6 5 2 4

sum:52

**:

1 #include 2 #include 3 #include 4

using

namespace

std;

5int

n,m;

6int s[100][100]; //

鄰接矩陣,用於儲存圖的結構

7int visit[100]; //

頂點標誌

8int indegree[100]; //

各個頂點的入度

9int ans[100

];10

int sum=0; //

記錄拓撲排序總數

11void dfs(int num) //

num記錄當前已經訪問的頂點個數 12

2122

for (i=0;i)

2728 visit[i]=1; //

該入度為0的點標記訪問過

29 ans[num]=i; //

儲存值

30 dfs(num+1); //

以訪問點數+1

3132

for (k=0;k//

回溯,恢復現場,將入度重新加一,並且將該頂點標記為未訪問

33if (s[i][k]) indegree[k]++;34}

35 visit[i]=0; //

回溯標誌 方便下一次for迴圈使用

36//

ans沒有必要回溯,因為後續的值可以直接覆蓋 37}

38}39return;40

}4142int

main()

5556 dfs(0

);57 cout<

sum:

"<

58return0;

59 }

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

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

插入排序的種類及實現

基本思想是從第乙個數開始,從後面每插入乙個數就與前面的已有的數進行比較,一般情況下從小到大排序。include include define tint define max size 20typedef t sqlist max size void insertsort1 sqlist l,int ...

拓撲排序的具體幾種方法及

一,幾種基本的方法 1.無前趨的的頂點優先拓撲排序 思路 在有向圖建立完成之後,維護兩個點集,乙個是當前出度為0的點集,記為 另乙個是出度不為0 的點集,記為 以及乙個記錄各個點出度的陣列。首先遍歷一遍圖的全部邊,初始化所有點的出度,然後出度為0的點依次 入 然後將 中的點分別出列,每次出列都需要更...