拓扑排序——一般应用于工程
/* 5 6 1 2 1 3 3 2 3 4 2 4 2 5 1 3 2 4 5 */ #include <iostream> #include <vector> using namespace std; const int MAXN = 1000 + 10; int n, m; vector<int> G[MAXN]; int du[MAXN]; int que[MAXN]; int main() { // read cin>>n>>m; while(m--) { int a, b; cin>>a>>b; G[a].push_back(b); du[b]++; } int start=1,tail=0; for(int i=1;i<=n;i++) if(du[i]==0) que[++tail]=i; while(start<=tail) { int u=que[start++]; for(int i=0;i<(int)G[u].size();i++) { int v=G[u][i]; du[v]--; if(du[v]==0)que[++tail]=v; } } for(int i=1;i<=n;i++) cout<<que[i]<<" "; return 0; }
我博客里有大量的从别的博客复制过来的代码,分析,以及理解,但我一律会在文章后面标记原博客大佬博客名,其中部分会加以连接。
绝无抄袭的意思,只是为了我在复习的时候找博客方便。
如有原作者对此有不满,请在博客留言,我一定会删除该博文。