tarjan算法和Kosaraju算法是求有向图的强连通分量的算法;

#include<iostream>
#include<cstring>
using namespace std;
int map[100][100],nmap[100][100];
int visit[100];
int time1[100];
int post[100];
int n,m,num=0,postid=0;
void dfs(int id);
void ndfs(int id);
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
      {
          int x,y;
          cin>>x>>y;
          map[x][y]=1;
          nmap[y][x]=1;
      }
    for(int i=1;i<=n;i++)
      if(visit[i]==0)
        dfs(i);
    for(int i=n;i>=1;i--)
      if(visit[post[i]]==1)
        {
          ndfs(post[i]);
          num++;
        }
    cout<<num<<endl;
    return 0;      
}
void dfs(int id)
{
    visit[id]=1;
    for(int i=1;i<=n;i++)
     if(visit[i]==0 && map[id][i])
       dfs(i);
     postid++;
     post[postid]=id;     
}
void ndfs(int id)
{
    visit[id]=0;
    for(int i=1;i<=n;i++)
     if(visit[i]==1 && nmap[id][i])
       ndfs(i);
}
Kosaraju算法模板

相关文章:

  • 2021-08-19
  • 2022-01-04
  • 2021-09-10
  • 2021-09-16
猜你喜欢
  • 2021-06-14
  • 2022-12-23
  • 2022-02-09
  • 2022-02-09
  • 2022-12-23
  • 2021-09-18
相关资源
相似解决方案