Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 17328 Accepted Submission(s): 6910
4 3 1 2 2 3 4 3
1 2 4 3
经典的拓扑排序~~~第一次写代码好激动哦~~
#include<stdio.h> #include<string.h> int map[550][550], indegree[550], queue[550]; void topo(int n){ int i, j, tmp, t = 0; for(i = 1; i <= n; ++i){ for(j = 1; j <= n; ++j){ if(indegree[j] == 0){ tmp = j; break; } } queue[t++] = tmp; indegree[tmp] = -1; for(j = 1; j <= n; ++j){ if(map[tmp][j]) indegree[j]--; } } for(i = 0; i < n; ++i){ printf("%d",queue[i]); if(i < n - 1) printf(" "); } printf("\n"); } int main(){ int n, m; while(~scanf("%d%d", &n, &m)){ int i, a, b; memset(map, 0, sizeof(map)); memset(indegree, 0, sizeof(indegree)); for(i = 0; i < m; ++i){ scanf("%d%d", &a, &b); if(map[a][b] == 0){ map[a][b] = 1; indegree[b]++; } } topo(n); } return 0; }