/*拓扑排序的实现*/ #include <iostream> #include <iostream> using namespace std; #define MAX 100 int main() { int map[MAX][MAX]; int d[MAX]; int c[MAX]; int n,m; while(cin>>n>>m) { if(m==0&&n==0) break; int a,b; memset(map,0,sizeof(map)); memset(d,0,sizeof(d)); for(int i=0;i<m;i++) { cin>>a>>b; if(map[a][b]) continue; map[a][b]=1; d[b]++; //计算入度 } //找到入度为0的 int index=0; for(int i=0;i<n;i++) { for(int j=0;j<n;j++){ if(d[j]==0) { d[j]--; c[index++]=j; for(int k=0;k<n;k++) if(map[j][k]) d[k]--; break; } } } } system("pause"); return 0; }