原题地址:http://poj.org/problem?id=2367

拓扑排序模板题吧。。题意输入一个n 有n个人 下面n行 ,第i行说明i是这一行数字的祖先 可以没有子孙 就是输入0 让给出一个序列 可以满足所有的子孙都在自己的祖先后面 bfs+邻接表
注:有多种可能的话 输出其中一种即可

#include<iostream>
#include<queue>
#include<vector>
#include<cstdio>
using namespace std;
vector<int>a[105];
int in[105]= {0};
int n;
void topu()
{
    queue<int>hsy;
    for(int i=1; i<=n; i++)
    {
        if(in[i]==0)///入度为0 说明是祖先 直接输出就好
            hsy.push(i),
                     cout<<i<<" ";
    }

    while(!hsy.empty())
    {
        int q=hsy.front();
        hsy.pop();
        for(int i=0; i<a[q].size(); i++)
        {
            in[a[q][i]]--;

            if(in[a[q][i]]==0)
            {
                hsy.push(a[q][i]);
                printf("%d ",a[q][i]);
            }
        }
    }
    puts("");

}
int main()
{
    cin>>n;

    for(int i=1; i<=n; i++)
    {
        int m;
        while(cin>>m)
        {
            if(!m)
                break;
            a[i].push_back(m),in[m]++;///a【i】【m】 是i的子孙 in【m】表示他有几个祖先
        }
    }
    topu();

}