tarjan 求强连通分量

来源:互联网 发布:淘宝默认收货时间 编辑:程序博客网 时间:2024/04/29 14:19


for(int i=0;i<n;i++) //图可能是不连通的,因此要表里每个点if(!dfn[i])tarjan(i);
void tarjan(int u){int i,v;dfn[u]=low[u]=ntime++;z.push(u);f[u]=1;for(i=0;i<q[u].size();i++){v=q[u][i];if(!dfn[v]){tarjan(v);low[u]=min(low[u],low[v]);}else if(f[v]==1)low[u]=min(low[u],dfn[v]);}if(dfn[u]==low[u])while(1){v=z.top();z.pop();f[v]=0;ceng[v]=nceng;//分层,ceng[v]表示v点存在第cneng层if(v==u){nceng++;break;}}}


原创粉丝点击