zoukankan      html  css  js  c++  java
  • 求有向图的强连通分量个数 之 Kosaraju算法

    代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 using namespace std;
     5 int maps[1100][1100],nmap[1100][1100];
     6 int vis[1001];
     7 int ans=0,aaa=0,n,m,post[1100];
     8 void dfs(int);
     9 void ndfs(int);
    10 int main()
    11 {
    12     scanf("%d%d",&n,&m);
    13     for(int i=1;i<=m;i++){
    14     int x,y;
    15     scanf("%d%d",&x,&y);
    16     maps[x][y]=1;
    17     nmap[y][x]=1;
    18     }
    19     for(int i=1;i<=n;i++)
    20     {
    21         if(vis[i]==0)
    22         dfs(i);
    23     }
    24     for(int i=n;i>=1;i--)
    25     {
    26         if(vis[post[i]]==1)
    27         {
    28             ndfs(post[i]);
    29             ans++;
    30         }
    31     }
    32     cout<<ans;
    33 }
    34 void ndfs(int x)
    35 {
    36     vis[x]=0;
    37     for(int i=1;i<=n;i++)
    38     {
    39         if(vis[i]&&nmap[x][i]==1)
    40         ndfs(i);
    41     }
    42 }
    43 void dfs(int x)
    44 {
    45     vis[x]=1;
    46     for(int i=1;i<=n;i++)
    47     {
    48         if(!vis[i]&&maps[x][i]==1){
    49             dfs(i);
    50         }
    51     }
    52     aaa++;
    53     post[aaa]=x;
    54 }
  • 相关阅读:
    记录一个异常
    ajax4
    ajax3
    ajax2
    ajax
    break与continue的区别
    Dom
    Dom元素的操作
    javascript (2)
    javascript
  • 原文地址:https://www.cnblogs.com/sssy/p/6693999.html
Copyright © 2011-2022 走看看