首页 > 代码库 > 拓扑排序
拓扑排序
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define maxn 105 int n,m,t; int a[maxn][maxn]; int vis[maxn],des[maxn]; bool dfs(int u) { vis[u]=-1; for(int i=1; i<=n; i++) if(a[u][i]) { if(vis[i]==-1) return false; else if(!vis[i]&&!dfs(i)) return false; } vis[u]=1; des[--t]=u; return true; } int main() { while(~scanf("%d%d",&n,&m)&&n+m) { t=n; memset(a,0,sizeof(a)); memset(vis,0,sizeof(vis)); int p,q; for(int i=0; i<m; i++) { cin>>p>>q; a[p][q]=1; } for(int i=1; i<=n; i++) if(!vis[i]) dfs(i); for(int i=0; i<n; i++) { if(!i) cout<<des[i]; else cout<<" "<<des[i]; } cout<<endl; } return 0; }
拓扑排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。