还有一个坑点就是,如果之前输入过相同的a,b 那么再输入的就无效了 ,wa~~~~~~~~
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;
int map[300][300];
int du[300];
int book[300];
int ans[300];
int n;
void Topsort()
{
memset(book,0,sizeof(book));
memset(ans,0,sizeof(ans));
int i, j, k;
for(i = n;i >= 1;i--){
k = -1;
for(j = n;j >= 1;j--){
if(!book[j]&&du[j]==0){
k = j;
break;
}
}
if(k == -1){
printf("-1\n");
return;
}
book[k] = 1;
ans[k] = i;
for(j = 1;j <= n;j++){
if(map[k][j]){
du[j]--;
}
}
}
printf("%d", ans[1]);
for(i = 2;i <= n;i++){
printf(" %d", ans[i]);
}
printf("\n");
}
int main()
{
int t;
cin >> t;
int a, b;
while(t--){
memset(du,0,sizeof(du));
memset(map,0,sizeof(map));
int m;
scanf("%d %d", &n, &m);
while(m--){
scanf("%d%d", &a, &b);
if(map[b][a] == 0){//只有之前没有输入过a b,du[a]才可以自加1
du[a]++;
}
map[b][a] = 1;
}
Topsort();
}
return 0;
}