非递归式,适用于有向无环图。
#include <iostream> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; const int maxn = 505; int MAP[maxn][maxn], in[maxn]; int n, m; int main() { while(~scanf("%d%d", &n, &m)) { memset(MAP, 0, sizeof(MAP)); memset(in, 0, sizeof(in)); int a, b; for(int i = 0; i < m; i++) { scanf("%d%d", &a, &b); if(!MAP[a][b]) //避免重复边 { MAP[a][b] = 1; in[b]++; } } int id; for(int i = 1; i <= n; i++) { for(id = 1; in[id]; id++ ); //避免再次统计id点,把入度改为-1 in[id] = -1; for(int j = 1; j <= n; j++) { if(MAP[id][j] == 1) in[j]--; } if(i > 1) printf(" "); printf("%d", id); } printf("\n"); } return 0; }