很简单的一道拓扑排序,也是第一次做。。。
附上代码:
#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; }