首先感谢这位大神的讲解~http://blog.youkuaiyun.com/u012861385/article/details/38059515
讲解的特别透彻~又学会了一种姿势,也知道Vector y用来干啥了~=_=
附上代码:
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
int n,m;
vector<int>G[31000];
int a[31000],out[31000];
int topsort()
{
priority_queue<int>que;
for(int i=1;i<=n;i++)
{
if(out[i]==0)
que.push(i);
}
int len=0;
while(!que.empty())
{
int t=que.top();
que.pop();
for(int i=0;i<G[t].size();i++)
{
out[G[t][i]]--;
if(!out[G[t][i]])
que.push(G[t][i]);
}
a[len++]=t;
}
for(int i=len-1;i>=0;i--)
{
if(i)
printf("%d ",a[i]);
else
printf("%d\n",a[i]);
}
}
int main()
{
int t;
int aa,bb;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=0;i<31000;i++)
{
a[i]=0;
out[i]=0;
G[i].clear();
}
for(int i=0;i<m;i++)
{
scanf("%d%d",&aa,&bb);
out[aa]++;
G[bb].push_back(aa);
}
topsort();
}
return 0;
}