![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<iostream> #include<string.h> #include<stdio.h> using namespace std; int timef = 0; int n,m ; int x,y; int a[1000][1000];// 图的邻接矩阵 int f[1000]; //完成时间 int vis[1000]; //1代表 被发现 2代表 已完成 void DFS(int u) { vis[u] = 1; //记录发现时刻 for(int v=1; v<=n; v++) //adj(u) //O(E) if(a[u][v] && vis[v]==0) DFS(v); vis[u] = 2; //记录完成时刻 timef++; f[u] = timef; } void DFS_main() //O(V+E) { timef = 0; for(int i=1; i<=n; i++) /// O(V) { if(vis[i] == 0) DFS(i); } } void Topological_sort() //O(V+E) { int tp[1000]; ////存放拓扑序列1..V DFS_main(); for(int i=1; i<=n; i++) //按finish的时间倒序存放在tp序列tp中 tp[n-f[i]+1] = i; for(int i=1; i<=n; i++) cout<<tp[i]<<" "; cout<<endl; } int main() { memset(vis,0,sizeof(vis)); scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) {scanf("%d%d",&x,&y); a[x][y]=1;} Topological_sort(); return 0; }
什么玩意。。。还是不太明白