图论之拓扑排序 poj 2367 Genealogical tree
Posted xcantaloupe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图论之拓扑排序 poj 2367 Genealogical tree相关的知识,希望对你有一定的参考价值。
题目链接 http://poj.org/problem?id=2367
题意就是给定一系列关系,按这些关系拓扑排序。
#include<cstdio> #include<cstring> #include<queue> #include<vector> #include<algorithm> using namespace std; const int maxn=200; int ans; int n; int in[maxn]; //记录入度 int num[maxn]; //记录答案 vector<int>E[maxn]; //记录边 void topo_sort() //拓扑排序 { queue<int>q; for(int i=1; i<=n; i++) if(!in[i]) { q.push(i); in[i]=-1; } while(!q.empty()) { int now=q.front(); num[ans]=now; ans++; q.pop(); for(int i=0; i<E[now].size(); i++) if(in[E[now][i]]>0) in[E[now][i]]--; for(int i=1; i<=n; i++) if(!in[i]) { in[i]=-1; q.push(i); } } return ; } int main() { while(~scanf("%d",&n)) { memset(num,0,sizeof(num)); memset(in,0,sizeof(in)); for(int i=0;i<maxn;i++) E[i].clear(); ans=0; for(int i=1; i<=n; i++) { int x; while(scanf("%d",&x)) { if(!x) break; E[i].push_back(x); in[x]++; } sort(E[i].begin(),E[i].end()); } topo_sort(); printf("%d",num[0]); for(int i=1; i<n; i++) printf(" %d",num[i]); puts(""); } return 0; }
以上是关于图论之拓扑排序 poj 2367 Genealogical tree的主要内容,如果未能解决你的问题,请参考以下文章
POJ 2367 Genealogical tree (拓扑排序基础题)
POJ 2367:Genealogical tree(拓扑排序)
POJ 2367 Genealogical tree 拓扑排序入门题