hdu1285拓扑排序
同样的又是复习,一道拓扑排序水题
代码:
#include<iostream> #include<cstring> using namespace std; #define N 550 int map[N][N]; int indegree[N]; int ans[N]; void toposort(int n) { int i,j,k; k=0; while(k<n) { for(i=1;i<=n;i++) { if(indegree[i]==0) { indegree[i]--; ans[k++]=i; for(j=1;j<=n;j++) { if(map[i][j]) indegree[j]--; } break; // 这个很关键,找到一个就退出 } } } return ; } int main() { int n,m; int a,b; int i,tmp; while(cin>>n>>m) { memset(map,0,sizeof(map)); memset(indegree,0,sizeof(indegree)); for(i=0;i<m;i++) { cin>>a>>b; if(map[a][b]==0) { map[a][b]=1; indegree[b]++; //入度 } } toposort(n); tmp=n-1; for(i=0;i<tmp;i++) cout<<ans[i]<<' '; cout<<ans[i]<<endl; } }