强连通模板(Tarjan)
2012-05-11 16:38
239 查看
使用说明:需要邻接表模板 ,头文件string.h 宏定义#define CLR(arr,v) memset(arr,v,sizeof(arr))
const int M = 105 ; Graph<M,M*M> g; int Connect[M],Low[M],Ind[M],Stack[M],InStack[M],ConnectNum,top,ind; void Dfs(int cur) { Low[cur] = Ind[cur] = ++ind; Stack[top++] = cur; InStack[cur] = true; for(int i = g.H[cur]; i != -1; i = g.Next[i]) { if(!Ind[ g.Num[i] ]) { Dfs(g.Num[i]); Low[cur] = min(Low[cur],Low[ g.Num[i] ]); } else if(InStack[ g.Num[i] ]) { Low[cur] = min(Low[cur],Ind[ g.Num[i] ]); } } if(Low[cur] == Ind[cur]) { ConnectNum++; int s; do{ s = Stack[--top]; Connect[s] = ConnectNum; InStack[s] = false; }while(cur != s); } } int Tarjan(int n) { CLR(Ind,0); CLR(InStack,false); ConnectNum = top = ind = 0; for(int i = 1;i <= n;++i) if(!Ind[i]) Dfs(i); return ConnectNum; }
相关文章推荐
- 模板,无向图强连通缩点,tarjan
- Tarjan模板 求割点数+桥+连通分量数 来自kuangbin
- 【模板】Tarjan求强连通分量
- 连通分量模板:tarjan: 求割点 && 桥 && 缩点 && 强连通分量 && 双连通分量 && LCA(近期公共祖先)
- hdu 3594 强连通好题仙人掌图,对自己的tarjan模板改下用这个
- tarjan 算法模板(边连通分量)
- hdu 3594 强连通好题仙人掌图,对自己的tarjan模板改下用这个
- [POJ 3180] The Cow Prom Tarjan求强连通分量 模板题
- 二分图强连通分量 tarjan 模板
- 【强连通】强连通模板 Tarjan
- hdu 1269 Tarjan强连通分量 模板
- hdu1269 Tarjan强连通分量 模板
- 【模板】【强连通分量】【Tarjan】
- tarjan 边连通分量+2-sat 模板
- hdu1269 Tarjan强连通分量 模板(转)
- 强连通分量Tarjan模板
- 【双连通】双连通模板 Tarjan
- 强连通图 学习笔记及tarjan模板
- hdu1269迷宫城堡(tarjan求强连通分量模板)
- 强连通分量Kosaraju、Tarjan【模板】