4 3 1 2 2 3 4 3
1 2 4 3
代码:
#include <stdio.h> #include <string.h> const int N = 505; int degree[N], res[N]; bool map[N][N]; int n, m; void Topo() { int i, j, p; for(i = 1; i <= n; i++) { p = -1; for(j = 1; j <= n; j++) { if(degree[j] == 0) { degree[j]--; res[i] = p = j; break; } } for(j = 1; j <= n; j++) { if(map[p][j] == true) { map[p][j] = false; degree[j]--; } } } } int main() { int i, x, y; while(scanf("%d %d", &n, &m) != EOF) { memset(map, false, sizeof(map)); memset(degree, 0, sizeof(degree)); memset(res, 0, sizeof(res)); for(i = 1; i <= m; i++) { scanf("%d %d", &x, &y); if(map[x][y] == false) { map[x][y] = true; degree[y]++; } } Topo(); for(int i =1; i <= n; i++) { if(i != n)printf("%d ", res[i]); else printf("%d\n",res[i]); } } return 0; }