Skip to main content

Finding the mother node of a 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);
    }
    void dfs(int start,bool visited[]);
    int find_mother();
};
void graph::dfs(int start,bool visited[])
{
    visited[start]=true;
    for(auto itr=adj[start].begin();itr!=adj[start].end();itr++)
    {
        if(!visited[*itr])
        {
            dfs(*itr,visited);
        }
    }
}
int graph::find_mother()
{
    bool *visited=new bool[v];
    for(int i=0;i<v;i++)
        visited[i]=false;
    int m=0;
    for(int i=0;i<v;i++)
    {
        if(visited[i]==false)
        {
            dfs(i,visited);
            m=i;
        }
    }
    for(int i=0;i<v;i++)
        visited[i]=false;
    dfs(m,visited);
    for(int i=0;i<v;i++)
    {
        if(visited[i]==false)
            return -1;
    }
    return m;
}
int main()
{
    graph g(5);
    g.add_edge(0,1);
    g.add_edge(0,2);
    g.add_edge(1,2);
    g.add_edge(2,3);
    g.add_edge(2,0);
    cout<<g.find_mother()<<endl;
    return 0;
}

Comments

Popular posts from this blog

Gcd using recursion

#include<iostream> #include<algorithm> using namespace std; int gcd(int m,int n) {     if(max(m,n)%min(m,n)==0)     {         return min(m,n);     }     else     {         gcd(max(m,n)%min(m,n),min(m,n));     } } int main() {     int m,n;     cin>>m>>n;     cout<<gcd(m,n);     return 0; }

Euclid algorithm to find gcd

#include<iostream> #include<algorithm> using namespace std; int gcd(int m,int n) {     while(n%m!=0)     {         int r=n%m;         n=m;         m=r;     }     return m; } int main() {     int m,n;     cout<<"Enter two numbers"<<endl;     cin>>m>>n;     cout<<gcd(m,n);     return 0; }

Bubble Sort Algorithm

//bubble sort algorithm in c++ #include<bits/stdc++.h> using namespace std; void bubble_sort(int arr[],int n) {     int i,j;     for(i=1;i<n;i++)     {         for(j=0;j<n-i;j++)         {             if(arr[j]>arr[j+1])             {                 swap(arr[j],arr[j+1]); //swap is an inbuilt function             }         }     }     //time complexity is O(n^2) } int main() {     int n,i;     cout<<"Enter the number of elements of the array"<<endl;     cin>>n;     int arr[n];     for(i=0;i<n;i++)     { ...