B3644 【模板】拓扑排序 / 家谱树
拓扑排序模板。
code
#include<bits/stdc++.h> using namespace std; const int N=1e4+5; int head[105],Next[N],to[N],que[105],sum[105]; void build(int i,int cnt,int x){ Next[cnt]=head[i]; to[cnt]=x; head[i]=cnt; sum[x]++; } int main(){ int n,cnt=1; cin>>n; for (int i=1;i<=n;i++){ int x; while (cin>>x && x!=0){ build(i,cnt,x); cnt++; } } int l=0,r=0; for (int i=1;i<=n;i++) if (sum[i]==0) que[r++]=i; while (l<r){ for (int j=head[que[l]];j>0;){ if (--sum[to[j]]==0) que[r++]=to[j]; j=Next[j]; } l++; } for (int i=0;i<r;i++) if (i==0) cout<<que[i]; else cout<<" "<<que[i]; return 0; }
浙公网安备 33010602011771号