拓扑排序 (Ordering Tasks UVA

题目描述:

原题:https://vjudge.net/problem/UVA-10305

题目思路:

1.依旧是DFS

2.用邻接矩阵实现图

3.需要判断是否有环

AC代码

 1 #include <iostream>
 2 #include <cstring>
 3 #include <stack>
 4 using namespace std;
 5 
 6 const int maxn = 1005;
 7 int G[maxn][maxn],tag[maxn],m,n ;
 8 stack<int> s ;
 9 
10 void dfs(int u)
11 {
12     tag[u] = -1 ;//正在访问
13     for(int v = 1;v <= n;v ++)    if(G[u][v] && !tag[v])
14         dfs(v) ;
15     s.push(u) ;
16     tag[u] = 1;//访问过了 
17 }
18 
19 int main(int argc, char *argv[])
20 {
21     while(scanf("%d%d",&n,&m) == 2 && m || n)
22     {
23         int u,v;
24         for(int i = 0;i < m;i ++){
25             scanf("%d%d",&u,&v);
26             G[u][v] = 1; //用邻接矩阵来实现图    
27         } 
28         memset(tag,0,sizeof(tag)) ;
29         for(int i = 1;i <= n;i ++)
30             if(!tag[i]) dfs(i) ;        
31          while(!s.empty())
32          {
33               printf("%d",s.top());
34               s.pop() ;
35             printf("%c",s.size()>0?' ':'
');         
36           }
37     }        
38     return 0;
39 }
原文地址:https://www.cnblogs.com/secoding/p/9539539.html