题目链接:点击打开链接
题目大意:略。
解题思路:略。
AC 代码
intdfn[MaxVertices], low[MaxVertices], Stack[MaxVertices], vis[MaxVertices]; inttot, idx; intmin(inta,intb) { returna>b?b:a; } voidtarjan(GraphG,intx) { PtrToVNodenode=G->Array[x]; intv; dfn[x]=low[x]=++tot; Stack[++idx]=x; vis[x]=1; while(NULL!=node) { v=node->Vert; if(-1==dfn[v]) { tarjan(G,v); low[x]=min(low[x],low[v]); } elseif(1==vis[v]) { low[x]=min(low[x],low[v]); } node=node->Next; } if(dfn[x]==low[x]) { do { printf("%d ",Stack[idx]); vis[Stack[idx--]]=0; }while(x!=Stack[idx+1]); puts(""); } } voidStronglyConnectedComponents( GraphG, void (*visit)(VertexV) ) { for(inti=0;i<MaxVertices;i++) { dfn[i]=-1; low[i]=vis[i]=0; } tot=0, idx=-1; for(inti=0;i<G->NumOfVertices;i++) if(-1==dfn[i]) tarjan(G,i); }