http://acm.hdu.edu.cn/showproblem.php?pid=1285
看到的一个比较好的模板
#include <iostream>
using namespace std;
#define MAX 505
int map[MAX][MAX];
int p[MAX];
int toposort(int n,int mat[][MAX],int* ret)
{ //浙大模板,未改一点
int d[MAX],i,j,k;
for (i=0;i<n;i++)
for (d[i]=j=0;j<n;d[i]+=mat[j++][i]);
for (k=0;k<n;ret[k++]=i)
{
for (i=0;d[i]&&i<n;i++);
if (i==n)
return 0;
for (d[i]=-1,j=0;j<n;j++)
d[j]-=mat[i][j];
}
return 1;
}
int main()
{
int n,m,a,b;
int i;
while(cin>>n>>m)
{
memset(map,0,sizeof(map));
for(i=0;i<m;i++)
{
cin>>a>>b;
map[a-1][b-1]=1;
}
toposort(n,map,p);
for(i=0;i<n;i++)
printf(i==0?"%d":" %d",p[i]+1);
printf("\n");
}
return 0;
}