关于拓扑排序
#include<queue>//队列所在的库
#include<iostream>
#include<vector>//看收藏里面有关于vector的用法
#include<cstdio>
using namespace std;
queue<int>que;
int rd[101]={0};//存储入度
vector<int> a[101];//存储指向
int main()
{
int n;
int x;
cin>>n;
for(int i=1;i<=n;i++)
{
while(1)
{
scanf("%d",&x);
if(x==0) break;
a[i].push_back(x);//将指向压入a[i]中储存
rd[x]++;
}
}
for(int i=1;i<=n;i++)
{
if(rd[i]==0)
que.push(i);//入队
}
while(!que.empty())//队列非空
{
int p=que.front();//p=队首元素
que.pop();//弹出队首元素
printf("%d ",p);
for(int i=0;i<a[p].size();i++)//查找p所指向的元素
{
int y=a[p][i];
rd[y]--;
if(rd[y]==0)//只有在当前p所指向的元素中,
//才有可能出现新的入度为0的元素
que.push(y);
}
}
}