Skip to main content

DFS 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 v);
    void dfsSearch(int v,bool visited[]);
};
void graph:: dfsSearch(int start,bool visited[])
{
    visited[start]=true;
    cout<<start<<" ";
    for(auto itr=adj[start].begin();itr!=adj[start].end();itr++)
    {
        if (!visited[*itr])
        {
            dfsSearch(*itr,visited);
        }
    }
}
void graph:: dfs(int start)
{
    bool *visited=new bool[v];
    for(int i=0;i<v;i++)
        visited[i]=false;
    dfsSearch(start,visited);
}
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;
    }
    cout<<"Enter the starting node"<<endl;
    int t;
    cin>>t;
    g.dfs(t);
    return 0;
}

Comments

Popular posts from this blog

Finding permutations of a string using recursion

#include<bits/stdc++.h> using namespace std; void print_perm(char str[],int k,int n) {     if(k==n)         cout<<str<<endl;     else     {         for(int i=k;i<n;i++)         {             swap(str[k],str[i]);             print_perm(str,k+1,n);             swap(str[k],str[i]);         }     } } int main() {     char str[20];     cout<<"Enter a string"<<endl;     cin>>str;     print_perm(str,0,strlen(str));     return 0; }

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; }

Reversing a stack using recursion

#include<bits/stdc++.h> using namespace std; stack<int> s2; void rev(stack<int> s) {     if(!s.empty())     {         int temp=s.top();         s.pop();         s2.push(temp);         rev(s);     } } void display(stack<int> s) {     while(!s.empty())     {         cout<<s.top()<<" ";         s.pop();     }     cout<<endl; } int main() {      stack<int> s;      int n;      cout<<"Enter the number of elements to push onto stack"<<endl;      cin>>n;      for (int i = 0; i < n; ++i)      {       ...