- 原题链接:Here!
- 分析:简单拓扑排序。
- CODE:
借助DFS完成拓扑排序
#include<cstdio> #include<cstring> const int maxn = 100+10; int n,m,t; int G[maxn][maxn]; int c[maxn]; int topo[maxn]; void init(){ memset(G,0,sizeof(G)); memset(c,0,sizeof(c)); memset(topo,0,sizeof(topo)); } bool dfs(int u){ c[u]=-1; for(int v=1;v<=n;v++){ if(G[u][v]){ if(c[v]<0) return false; else if(!c[v] && !dfs(v)) return false; } } c[u]=1; topo[t--]=u; return true; } bool topo_sort(){ t=n; for(int u=1;u<=n;u++) if(!c[u]) if(!dfs(u)) return false; return true; } int main(){ int u,v; while(scanf("%d%d",&n,&m)!=EOF && n+m){ init(); for(int i=1;i<=m;i++){ scanf("%d%d",&u,&v); G[u][v]=1; } if(topo_sort()) for(int i=1;i<=n;i++) printf("%d%c",topo[i],i==n?'\n':' '); } return 0; }
Uva oj 10305 Ordering Tasks(拓扑排序)
最新推荐文章于 2021-07-25 10:55:28 发布