Topo排序

来源:互联网 发布:古文观止知乎 编辑:程序博客网 时间:2024/05/27 06:53
//时间复杂度(n+e)n:顶点数e:边数#include<cstdio>#include<vector>#include<queue>using namespace std;const int MAXN=1000;struct cmp{bool operator()(int x,int y){return x>y;}};vector<int> map[MAXN];priority_queue<int,vector<int>,cmp> que;int cnt[MAXN];int main(){int N,M;int i,j;int p1,p2,tmp,count,a;while(scanf("%d%d",&N,&M)==2){for(i=1;i<=N;i++){map[i].clear();cnt[i]=0;}while(!que.empty())que.pop();for(i=1;i<=M;i++){scanf("%d%d",&p1,&p2);map[p1].push_back(p2);cnt[p2]++;}for(i=1;i<=N;i++){if(!cnt[i])que.push(i);}count=0;while(!que.empty()){count++;tmp=que.top();que.pop();printf("%d",tmp);if(count<N)printf(" ");elseprintf("\n");for(i=0;i<map[tmp].size();i++){a=map[tmp][i];cnt[a]--;if(cnt[a]==0)que.push(a);}}}return 0;}


原创粉丝点击