/* Name: poj 2367 Genealogical tree Author: UnimenSun Date: 21/05/11 15:04 Description: 拓扑排序水题 */ /*解题报告: 拓扑排序祼题 不能再祼了 适合刚开始学的练习用 */ #include <iostream> #include <cstring> using namespace std; const int MAXN = 110; int n; bool graph[MAXN][MAXN]; short indegree[MAXN]; short result[MAXN]; void topsort() { int i, j, k; memset(indegree, 0, sizeof(indegree)); //初始化入度 for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { if(graph[i][j]) indegree[j]++; } } for(k=1; k<=n; ++k) { for(j=1; j<=n; ++j) { if(0 == indegree[j]) { i = j; } } indegree[i]--; result[k] = i; for(j=1; j<=n; ++j) { if(graph[i][j]) indegree[j]--; } } } int main() { int i; while(cin>>n) { //读入并建图 memset(graph, false, sizeof(graph)); for(i=1; i<=n; ++i) { while(1) { int a; cin>>a; if(0 == a) break; graph[i][a] = true; } } topsort(); for(i=1; i<=n; ++i) cout<<result[i]<<" "; cout<<endl; } return 0; }