zoukankan      html  css  js  c++  java
  • 求强连通分量

    #include<iostream>
    #include<stdio.h>
    #include<algorithm>
    #include<vector>
    #include<string>
    #include<string.h>
    using namespace std;
    const int maxx = 100010;
    int n,m;
    vector<int>g[maxx];
    vector<int>rg[maxx];
    vector<int>vs;
    bool vis[maxx];
    int cmp[maxx];
    void dfs(int v)
    {
        vis[v]=true;
        for(int i=0;i<g[v].size();i++)
        {
            if(!vis[g[v][i]]) dfs(g[v][i]);
        }
        vs.push_back(v);
    }
    void rdfs(int v)
    {
        vis[v]=true;
        for(int i=0;i<rg[v].size();i++)
        {
            if(!vis[rg[v][i]]) rdfs(rg[v][i]);
        }
    }
    int main()
    {
        while(scanf("%d%d",&n,&m)&&(n+m)!=0)
        {
            for(int i=0;i<=n;i++)
            {
                g[i].clear();
                rg[i].clear();
            }
            vs.clear();
            for(int i=0;i<m;i++)
            {
                int tmp1,tmp2;
                scanf("%d%d",&tmp1,&tmp2);
                g[tmp1].push_back(tmp2);
                rg[tmp2].push_back(tmp1);
    
            }
            memset(vis,0,sizeof(vis));
            for(int i=1;i<=n;i++)
            {
                if(!vis[i])
                {
                    dfs(i);
                }
            }
            memset(vis,0,sizeof(vis));
            int k=0;
            for(int i=vs.size()-1;i>-1;i--)
            {
                if(!vis[vs[i]])
                {
                    rdfs(vs[i]);
                    k++;
                }
            }
            if(k==1) printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }

    先把代码放这,以后有空把学习过程补上。

  • 相关阅读:
    [iOS 多线程 & 网络
    [iOS 多线程 & 网络
    [iOS 多线程 & 网络
    [iOS 多线程 & 网络
    [iOS 多线程 & 网络
    [iOS UI进阶
    Python基础
    24种编程语言的Hello World程序
    python中的输入和输出
    第一个Python程序
  • 原文地址:https://www.cnblogs.com/superxuezhazha/p/5721705.html
Copyright © 2011-2022 走看看