Skip to main content

Counting the number of strongly connected sub graph

#include<bits/stdc++.h>
using namespace std;
class graph
{
    int v;
    list<int> *adj;
public:
    graph(int v)
    {
        this->v=v;
        adj=new list<int>[v];
    }
    void add_edge(int v,int w)
    {
        adj[v].push_back(w);
        adj[w].push_back(v);
    }
    void dfs(int start,bool visited[]);
    void counted(int start);
};
void graph:: dfs(int start,bool visited[])
{
    visited[start]=true;
    for(auto it=adj[start].begin();it!=adj[start].end();it++)
    {
        if(!visited[*it])
        {
            dfs(*it,visited);
        }
    }
}
void graph:: counted(int start)
{
    bool *visited=new bool[v];
    for(int i=0;i<v;i++)
        visited[i]=false;
    int count=0;
    visited[start]=true;
    for(int k=0;k<v;k++)
    {
        if(!visited[k])
        {
            dfs(k,visited);
            count++;
        }
    }
    cout<<"count is "<<count<<endl;
}
int main()
{
    int v;
    cout<<"Enter the number of vertices"<<endl;
    cin>>v;
    graph g(v);
    while(1)
    {
        int x,y;
        cout<<"Enter the nodes"<<endl;
        cin>>x>>y;
        g.add_edge(x,y);
        cout<<"Enter -1 to exit"<<endl;
        int t;
        cin>>t;
        if(t==-1)
            break;
    }
    int t;
    cout<<"Enter the start node"<<endl;
    cin>>t;
    g.counted(t);
    return 0;
}

Comments

Popular posts from this blog

Codeforces-Dubstep solution

#include < bits / stdc ++. h > using namespace std ; int main () { string str ; getline ( cin , str ); int index = str . find ( "WUB" ); int count = 0 ; while ( index !=- 1 ) { str . replace ( index , 3 , " " ); //str.erase(str.begin()+index,str.begin()+index+3); index = str . find ( "WUB" ); } cout << str ; return 0 ; }

codeforces-Anton and Danik

#include < bits / stdc ++. h > using namespace std ; int main () { long n ; string str ; cin >> n ; cin >> str ; long count = 0 , index ; index = str . find ( "A" ); while ( index !=- 1 ) { count ++; str . erase ( str . begin ()+ index , str . begin ()+ index + 1 ); index = str . find ( "A" ); } if ( count > n - count ) cout << "Anton" ; else if ( count < n - count ) cout << "Danik" ; else cout << "Friendship" ; return 0 ; }