入门级拓扑排序题,题目保证无环路,直接拓扑展开一次就可以了! 点击打开链接
#include < iostream >
#include < cstring >
#include < queue >
#define N 505
using namespace std;
int g[N][N],d[N],r[N];
void topologicialsort(int n)
{
int i,j,t,k=0;
priority_queue <int,vector<int>,greater<int> > que;
for(i=1;i<=n;i++)
if(d[i]==0) que.push(i);
while(!que.empty())
{
t=que.top();que.pop();
for(r[k++]=t,i=1;i<=n;i++)
{
if(g[t][i])
{
d[i]-=1,g[t][i]=0;
if(!d[i]) que.push(i);
}
}
}
for(j=0;j<n;j++)
printf(j==0?"%d":" %d",r[j]);
puts("");
}
int main ()
{
//freopen("ts.txt","r",stdin);
int i,n,m,x,y;
while(~scanf("%d%d",&n,&m))
{
memset(g,0,sizeof(g));
memset(d,0,sizeof(d));
for(i=0;i<m;i++)
{
scanf("%d%d",&x,&y);
if(g[x][y]) continue;
d[y]++; g[x][y]=1;
}
topologicialsort(n);
}
return 0;
}