拓扑排序
//拓扑排序 #include<bits/stdc++.h> using namespace std; queue<int>q; int n,m; int in[1000]; bool b[1001]; struct node { int n; node *next; }*e[1000]; int main() { cin>>n>>m; node *p; int x; for(int i=1;i<=m;i++) { p=new node(); cin>>x>>p->n; in[p->n]+=1; if(e[x]==NULL) e[x]=p; else { p->next=e[x]->next; e[x]->next=p; } } for(int i=1;i<=n;i++) if(in[i]==0) q.push(i); while(!q.empty()) { node *p; p=e[q.front()]; cout<<q.front()<<"->"; while(p!=NULL) { in[p->n]-=1; if(in[p->n]==0) q.push(p->n); p=p->next; } q.pop(); } return 0; }