很简单的一道拓扑排序,也是第一次做。。。
附上代码:
#include<stdio.h>
#include<string.h>
int map[202][202];
int vis[202];
int cnt[202];
int ans[202];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(map,0,sizeof(map));
memset(vis,0,sizeof(vis));
memset(cnt,0,sizeof(cnt));
int n,m,k;
scanf("%d%d",&n,&m);
for(int i=0; i<m; i++)
{
int a,b;
scanf("%d%d",&a,&b);
if(!map[b][a])
cnt[a]++;
map[b][a]=1;
}
for(int i=n; i>0; i--)
{
k=-1;
for(int j=n; j>0; j--)
if(!vis[j]&&!cnt[j])
{
k=j;
break;
}
if(k==-1)
{
printf("-1\n");
break;
}
vis[k]=1;
ans[k]=i;
for(int j=n; j>0; j--)
if(map[k][j])
cnt[j]--;
}
if(k==-1)
continue;
for(int i=1; i<=n; i++)
{
if(i!=1)
printf(" ");
printf("%d",ans[i]);
}
printf("\n");
}
return 0;
}