拓扑排序模板
来源:互联网 发布:台风战斗机 知乎 编辑:程序博客网 时间:2024/05/26 05:53
#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <queue>using namespace std;const int MAXN=1100;vector<int>g[MAXN];int degree[MAXN];int ans[MAXN];bool toposort(int n){ memset(degree,0,sizeof(degree)); for(int i=0;i<n;i++) // 下标从0~n-1 { for(int j=0;j<g[i].size();j++) { degree[g[i][j]]++; } } queue<int>q; int tot=0,cnt=0; for(int i=0;i<n;i++) { if(!degree[i]) { q.push(i); cnt++; } } if(cnt != 1) return 0; // 这一行依情况而选择 while(q.size()) { int qq=q.front(); q.pop(); ans[tot++]=qq; // ans记录顺序 for(int i=0;i<g[qq].size();i++) { degree[g[qq][i]]--; if(degree[g[qq][i]]==0) q.push(g[qq][i]); } } if(tot==n) return 1; return 0;}int main(){ int n,m; while(scanf("%d%d",&n,&m)&&n) { int a,b; memset(g,0,sizeof(g)); for(int i=0;i<m;i++) { scanf("%d%d",&a,&b); g[a].push_back(b); } if(toposort(n)) { for(int i = 0; i < n; i++) { printf("%d ", ans[i]); } printf("\n"); } else printf("ERROR!\n"); } return 0;}
0 0
- 拓扑排序的模板
- 拓扑排序及模板
- 拓扑排序模板
- 拓扑排序模板
- 拓扑排序模板
- 拓扑排序-模板
- 拓扑排序toposort 模板
- 拓扑排序模板
- 拓扑排序模板
- 拓扑排序算法模板
- 拓扑排序【模板】
- 拓扑排序模板
- 拓扑排序模板
- 拓扑排序模板
- 拓扑排序模板
- 拓扑排序模板
- 拓扑排序模板
- 拓扑排序模板
- Levenshtein distance最小编辑距离算法实现
- S2SH+ajax+json-------(二)实现异步加载
- AndroidStudio实用插件收集
- 我自己对三维数组的理解
- ssh之struts2xml简单配置
- 拓扑排序模板
- POJ Power Network (dinic)
- SkipList 跳表
- C语言学习-通过柴田望洋的《明解C语言》(3)
- 优秀程序员的七大特征,你具备几条?
- Logistic回归总结
- freqspace
- HDU 2088 &&TOJ 1601. Box of Bricks【水题】好思路
- 硬件加速(HardwareAccelerated)