强连通分量(tarjan算法)
2014-04-29 09:22
281 查看
#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> #include<vector> #define max 110 using namespace std; int par[max],in[max],out[max]; int low[max],dnf[max],sta[max],ccount,tot,cnt;//ccount为强连通分量个数 bool use[max]; vector<int >g[max]; int mmax(int a,int b) { int p; if(a>b) p=a; else p=b; return p; } void dfs(int index) { int i,p,k; low[index]=dnf[index]=++cnt; use[index]=1; sta[tot++]=index; p=(int)g[index].size(); for(i=0;i<p;i++) { k=g[index][i]; if(!dnf[k]) { dfs(k); if(low[index]>low[k]) low[index]=low[k]; } else if(use[k]) { if(low[index]>dnf[k]) low[index]=dnf[k]; } } if(low[index]==dnf[index]) { ccount++; while(1) { tot--; use[sta[tot]]=0; par[sta[tot]]=ccount; if(tot==0||sta[tot]==index) break; } } return ; } void targin(int n) { memset(use,0,sizeof(use)); memset(dnf,0,sizeof(dnf)); memset(low,0,sizeof(low)); memset(in,0,sizeof(in)); memset(out,0,sizeof(out)); cnt=0; ccount=0; tot=0; int i,s=0,j,q; int p,t; for(i=1;i<=n;i++) { if(!dnf[i]) dfs(i); } }
相关文章推荐
- 有向图强连通分量的Tarjan算法
- 图论复习之强连通分量以及缩点—Tarjan算法
- 求强连通分量模板(tarjan算法)
- 有向图强连通分量 Tarjan算法【java实现】
- Codeforces 427C - Checkposts 极大连通分量Tarjan算法模板题(STL实现)
- 4000 有向图强连通分量的Tarjan算法
- 有向图强连通分量的Tarjan算法
- HDU OJ 1269 迷宫城堡【有向图强连通分量的Tarjan算法 入门】
- [转载] 有向图强连通分量的Tarjan算法 ——byvoid
- 有向图的强连通分量的tarjan算法总结
- 有向图强连通分量 Tarjan算法【java实现】
- 强连通分量 tarjan算法
- tarjan算法求强连通分量
- 求强连通分量的Tarjan算法
- Tarjan算法(有向图强连通分量问题)
- 有向图强连通分量的Tarjan算法
- Tarjan算法-求强连通分量
- 有向图强连通分量的Tarjan算法
- 求强连通分量之tarjan算法
- 有向图强连通分量 Tarjan算法【java实现】