模板_tarjan强连通缩点算法

来源:互联网 发布:网络课程数学文化答案 编辑:程序博客网 时间:2024/05/21 12:51
#define min(a,b) a<b?a:bvector<int>e[5005];stack<int>S;int dfn[1005];int low[1005];int time,Bcnt;int Belong[1005];int in_stack[1005];int size_stack[1005];void tarjan(int u){int i,v;S.push(u);in_stack[u]=true;dfn[u]=low[u]=++time;for(i=0;i<e[u].size();i++){v=e[u][i];if(!dfn[v]){tarjan(v);low[u]=min(low[u],low[v]);}else if(in_stack[v]){low[u]=min(low[u],dfn[v]);}}if(dfn[u] == low[u]){Bcnt++;do{v=S.top();S.pop();Belong[v]=Bcnt;in_stack[v]=false;size_stack[Bcnt]++;}while(v!=u)}}

0 0
原创粉丝点击