Tarjan

来源:互联网 发布:php小炒花生米 编辑:程序博客网 时间:2024/05/29 19:00
vector<vector<int> > edges(105);vector<vector<int> > graph(105);int dfn[105], low[105];int vis[105], in_stack[105];int tag[105];int src = 1, cnt = 0;stack<int> st;void init(){memset(dfn, 0, sizeof(dfn));memset(low, 0, sizeof(low));memset(vis, 0, sizeof(vis));memset(tag, -1, sizeof(tag));memset(in_stack, 0, sizeof(in_stack));}void tarjan(int u){dfn[u] = src;    low[u] = src;src++;st.push(u);    vis[u] = true;    in_stack[u] = true;for (int i = 0; i<edges[u].size(); i++){int &vtx = edges[u][i];if (!vis[vtx]){tarjan(vtx);low[u] = min(low[u], low[vtx]);}else if (in_stack[vtx]){low[u] = min(low[u], dfn[vtx]);}}if (dfn[u] == low[u]){        int v = st.top();do{v = st.top();st.pop();in_stack[v] = false;tag[v] = cnt;} while (u != v);cnt++;}}

1 0
原创粉丝点击