《当拓扑序莫名调换顺序》
就离谱
#include <bits/stdc++.h>
#define int long long
#define M memset(h,-1,sizeof h),memset(d,0,sizeof d)
using namespace std;
const int N=10010;
int n,m;
int e[N],ne[N],h[N],idx;
int d[N],q[N];
void add(int a,int b) { e[idx]=b,ne[idx]=h[a],h[a]=idx++; }
void topsort() {
int hh=0,tt=-1;
for(int i=1;i<=n;i++) { if(!d[i]) { q[++tt]=i; cout<<i<<" "; } }
while(hh<=tt) {
int t=q[hh++];
for(int i=h[t];i!=-1;i=ne[i]) {
int j=e[i];
d[j]--;
if(d[j]==0) q[++tt]=j,cout<<j<<" ";
}
}
cout<<endl;
return;
}
signed main() {
while(1) {
cin>>n>>m;
if(n==0 && m==0) return 0;
M;
for(int i=1;i<=m;i++) {
int a,b;
cin>>a>>b;
add(a,b);
d[b]++;
}
topsort();
}
return 0;
}
$Thanks$