原题地址: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();
}