邻接表拓扑排序,保证从小到大输出(未测试)

来源:互联网 发布:淘宝优惠券jp519 编辑:程序博客网 时间:2024/06/07 20:25


#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<queue>#include<vector>using namespace std;const int N=100009;int head[N],tot,pre[N],edge[N],n,m,b[N],cnt[N],a[N];void add(int x,int y){edge[++tot]=y;pre[tot]=head[x];head[x]=tot;}int main(){scanf("%d%d",&n,&m);int x,y;while (m--){scanf("%d%d",&x,&y);cnt[y]++;add(x,y);}priority_queue<int,vector<int>,greater<int> > q;for (int i=1;i<=n;i++) if (cnt[i]==0) q.push(i);int z=0;while (!q.empty()){int u=q.top();q.pop();a[u]=++z;for (int i=head[u];i;i=pre[i]){int v=edge[i];cnt[v]--;if (cnt[v]==0) q.push(v);}}for (int i=1;i<=n;i++) printf("%d ",a[i]);return 0;} 


0 0
原创粉丝点击