求强连通分支 tarjan算法
来源:互联网 发布:读写分离 mysql原理 编辑:程序博客网 时间:2024/05/01 03:27
#include <iostream>#include <cstdio>#include <vector>using namespace std;const int maxn = 10;int tree[maxn];int dfn[maxn];vector<int>g[maxn];int n, m;int temp[maxn];int top;int sta[maxn];void init() { for (int i = 1; i <= n; i ++) { g[i].clear(); temp[i] = 0; }}void tarbfs(int k, int lay, int& scc_num) { temp[k] = 1; tree[k] = lay; dfn[k] = lay; sta[++top] = k; for (int i = 0; i < (int)g[k].size(); i ++) { if (temp[g[k][i]] == 0) { tarbfs(g[k][i], ++lay, scc_num); } if (temp[g[k][i]] == 1) tree[k] = min(tree[k], tree[g[k][i]]); } if (dfn[k] == tree[k]) { ++scc_num; do { tree[sta[top]] = k; //极大强连通分支缩点 temp[sta[top]] = 2; }while (sta[top--] != k); }}int tarjan() { int lay = 1; int scc_num = 0; top = 0; for (int i = 1; i <= n; i ++) { if (temp[i] == 0) { tarbfs(i, lay, scc_num); } }return scc_num;}int main() { while (cin >> n >> m) { init(); int x, y; for (int i = 0; i < m; i ++) { scanf("%d%d", &x, &y); g[x].push_back(y); } cout << tarjan() <<endl; for (int i = 1; i <= n; i ++) { cout << i<<"---->"<<tree[i]<<endl; } }return 0;}
0 0
- 求强连通分支 tarjan算法
- 强连通分支之Tarjan 算法
- 算法基础 - 求有向图的强连通分支(Tarjan算法)
- Tarjan算法求强连通分量
- 求强连通分量的Tarjan算法
- Tarjan算法-求强连通分量
- tarjan算法求强连通分量
- tarjan算法求强连通分量
- 求强连通分量之tarjan算法
- Tarjan算法(求强连通分量)
- tarjan算法求强连通分量
- tarjan算法----求强连通分量
- Tarjan算法求强连通分量总结
- Tarjan求强连通分量算法
- tarjan 算法(求强连通分量)
- 求强连通分量的Tarjan算法
- 求强连通分量的Tarjan算法
- tarjan 算法求强连通分量
- 排序算法(4)-线性时间排序
- struts2 的试图转发类型
- STC12C5A60S2与CH340搭建下载电路存,开关断开时VCC上的电压
- hdoj 2993 斜率优化
- Oracle ADF 提供了以下声明式的方式使用Groovy
- 求强连通分支 tarjan算法
- 赢在投资网-股票配资1:6放大资金,盈利随时提取
- cppcheck 单元测试框架浅析
- Java 欧拉工程 第二十篇【 算出100!的各位之和。】
- nebula 01
- Android studio 解决 No content provider found for permission revoke 问题
- JAVA中List、Map、Set的区别与选用
- JavaScript HTML5 手机网站 基本功能
- 面向对象转载(精)