toposort算法模板
来源:互联网 发布:程序员有前途吗 编辑:程序博客网 时间:2024/05/01 16:05
//队列实现/*复杂度:O(|V|+|E|)输入: n 全局变量 表示点数 g 全局变量 g[i]表示从点i连出去的边输出:返回对给定的图,是否可以拓扑排序 topo 全局变量,拓扑排序的结果*/const int maxn = 100000+5;vector<int> g[maxn];//邻接矩阵作用int n,m,topo[maxn];int indegree[maxn];//入度bool toposort(){ memset(indegree,0,sizeof(indegree)); for(int i = 0; i < n; ++i) for(int j = 0; j < g[i].size(); ++j) indegree[g[i][j]]++; int tot = 0; queue<int> q; for(int i = 0; i < n; ++i) if(!indegree[i]) q.push(i); while(!q.empty()) { int x = q.front(); q.pop(); topo[tot++] = x; for(int j = 0; j < g[x].size(); ++j) { int t = g[x][j]; indegree[t]--; if(!indegree[t]) q.push(t); } } if(tot == n) return true; else return false;}//DFS递归实现,from刘汝佳《算法竞赛入门经典II》int c[maxn];int topo[maxn],t;bool dfs(int u){ c[u] = -1;//-1表示正在访问,还未返回 for(int v = 0; v < n; ++v) if(G[u][v]) { if(c[v] < 0) return false; else if(!c[v] && !dfs(v)) return false; } c[u] = 1;//访问结束且已返回,1代表访问过 topo[--t] = u; return true;}bool toposort(){ t = n; memset(c,0,sizeof(c)); for(int u = 0; u < n; ++u) if(!c[u]) if(!dfs(u)) return false; return true;}
0 0
- toposort算法模板
- 拓扑排序toposort 模板
- TopoSort
- toposort
- TopoSort 实现之不用高端静态链栈算法
- 图toposort
- 拓扑排序 toposort
- Toposort(拓扑排序)
- HDU 5638 Toposort
- HDU 5638 Toposort
- POJ 1094(TopoSort)
- 拓扑排序(Toposort)
- CLRS中的BFS、DFS、ToPoSort
- hdu 5438 Ponds(toposort+DFS)
- HDU 5638:Toposort 优先队列
- 2017.9.6 复习之 toposort
- 匈牙利算法模板+KM算法模板
- 【模板】基础算法&&小算法
- 高精度模板
- Elastic Beanstalk Tomcat Container Timezone
- PHP高效率写法(详解原因)
- HDU 5024 Wang Xifeng's Little Plot(暴力枚举+瞎搞)
- Linux服务器配置——搭建SVN服务器
- toposort算法模板
- JavaScript_03 事件
- [unity3d]navmesh 自动寻路 鼠标点击的坐标获取 鼠标点击的世界坐标
- 深入浅出JMS(一)——JMS简介
- K-SVD算法
- 用GDB调试程序(一)
- 用GDB调试程序(二)
- 用GDB调试程序(三)
- Android应用开发多语言文件夹