POJ Genealogical tree(拓扑排序)

来源:互联网 发布:网红拍照软件 编辑:程序博客网 时间:2024/05/21 19:43

赤果果的拓扑排序,水之~

#include<iostream>#include<algorithm>#include<string.h>#include<stack>#include<queue>#include<math.h>#include<cstdio>using namespace std;int map[110][110];int in_degree[110];int ans[110];int top_sort(int n){int tmp=1;queue<int> q;memset(in_degree,0,sizeof(in_degree));for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(map[i][j])in_degree[j]++;for(int i=1;i<=n;i++)if(!in_degree[i])q.push(i);while(!q.empty()){int u=q.front();q.pop();ans[tmp++]=u;for(int i=1;i<=n;i++){if(map[u][i]){map[u][i]=0;in_degree[i]--;if(in_degree[i]==0)q.push(i);}}}return tmp;}int main(){int n,m,v;while(~scanf("%d",&n)){memset(map,0,sizeof(map));memset(ans,0,sizeof(ans));for(int i=1;i<=n;i++){while(1){scanf("%d",&v);if(v==0) break;map[i][v]=1;}}int t=top_sort(n);for(int i=1;i<t;i++)cout<<ans[i]<<(i==(t-1)?'\n':' ');}return 0;}


原创粉丝点击