有向图强连通分量的Tarjan算法

来源:互联网 发布:怎样正确使用电视网络 编辑:程序博客网 时间:2024/06/07 03:27

这里收录了一些资源

实现:http://blog.csdn.net/xinghongduo/article/details/6196292

介绍:https://www.byvoid.com/zhs/blog/scc-tarjan

http://blog.csdn.net/tomorrowtodie/article/details/52298549?locationNum=2&fps=1

这是我自己的代码

#include<iostream>#include<cstdio>#include<vector>#include<queue>using namespace std;vector<int>poi[40000];int dfn[40000],low[40000],stack[40000];bool instack[40000];int tim=1,top;int dfs(int u){int i;dfn[u]=low[u]=tim++;stack[++top]=u;instack[u]=true;for(i=0;i<poi[u].size();++i){if(!dfn[poi[u][i]]){dfs(poi[u][i]);low[u]=min(low[u],low[poi[u][i]]);}else if(instack[poi[u][i]]){low[u]=min(low[u],dfn[poi[u][i]]);}}if(dfn[u]==low[u]){cout<<"{ ";          do          {              u=stack[top--];              instack[u]=false;              cout<<u<<' ';          }while(dfn[u]!=low[u]);          cout<<"}"<<endl;  }}int main(){freopen("a.in","r",stdin);int i,n,m,sum=0,x,y;cin>>n>>m;for(i=1;i<=m;++i){cin>>x>>y;poi[x].push_back(y);}for(i=1;i<=n;++i){if(!dfn[i])dfs(i);}return 0;}
觉得有用请留言,谢谢

0 0
原创粉丝点击