拓扑排序模板
思路:BFS选取入度为0的点进入序列,并删除连边
#include<bits/stdc++.h> using namespace std; const int N=100; const int M=10000; int head[N],tot; struct node{int v,next;}e[M]; void insert(int u,int v){ e[++tot]=(node){v,head[u]};head[u]=tot;} int n,m; int indegree[MAX_N]; void topo(){ queue<int> q; for(int i=1;i<=n;i++) if(indegree[i]==0) q.push(i); while(!q.empty()){ int u=q.front(); cout<<u<<endl; q.pop(); for(int i=head[u];i;oi=e[i].next){ int v=e[i].v; indegree[v]--; if(indegree[v]==0) q.push(v);} } } int main(){ cin>>n>>m; for(int i=1;i<=m;i++){ int u,v;cin>>u>>v; insert(u,v);indegree[v]++;} topo(); return 0; }