题目描述:
题目思路:
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 }