Untitled

 avatar
unknown
plain_text
2 years ago
2.4 kB
2
Indexable
// BFS DFS ::

#include <bits/stdc++.h>
using namespace std;

class Edge{
    public:
    int src;
    int dest;
};

class Graph
{
    public:
    vector<vector<int>> adjList;
    Graph(vector<Edge> &edges, int v)
    {
        adjList.resize(v);
        for(auto &edge: edges)
        {
            adjList[edge.src].push_back(edge.dest);
            adjList[edge.dest].push_back(edge.src);
        }
    }
};

void recursiveBFS(Graph &graph, queue<int> &q, vector<bool> &discovered)
{
    if(q.empty())
    {
        return;
    }
    int v = q.front();
    q.pop();
    cout<<v<<" ";
    for(int u: graph.adjList[v])
    {
        if(!discovered[u])
        {
            discovered[u] = true;
            q.push(u);
        }
    }
    recursiveBFS(graph, q, discovered);
}
void DFS(Graph &graph, int v, vector<bool> &discovered)
{
    discovered[v] = true;
    cout<<v<<" ";
    for(int u: graph.adjList[v])
    {
        if(!discovered[u])
        {
            DFS(graph, u, discovered);
        }
    }
}
int main()
{
    vector<Edge> edge;
    int v,e;
    int source;
    int destination;
    cout<<"Enter the number of vertices and edges in graph : ";
    while(true)
    {
        if(cin>>v>>e)
        {
            break;
        }
            cin.clear();
            cin.ignore(1000, '\n');
            cout<<"Enter again!"<<endl;
    }

    cout<<"Enter the source and destination of the edges : "<<endl;
    for(int i=0 ; i<e ; i++)
    {
            if(cin>>source>>destination && source<v+1 && destination<v+1)
            {
                // if(source<v && destination<v)
                // {
                    edge.push_back({source,destination});
                    // break;
            }
            else{

                cin.clear();
            cin.ignore(1000, '\n');
            cout<<"This vertex not present !";
            i--;
            }
        // }
    }
    
    Graph graph(edge,v+1);
    vector<bool> discovered1(v+1,false);
    vector<bool> discovered2(v+1,false);
    queue<int> q;
    int stratnode;
    cout<<"Enter the starting node : ";
    cin>>stratnode;
    q.push(stratnode);
    discovered1[stratnode] = true;
    cout<<"BFS : "<<endl;
    recursiveBFS(graph,q,discovered1);
    cout<<endl;
    cout<<"DFS : "<<endl;
    if(discovered2[stratnode] == false){
    DFS(graph, stratnode, discovered2);}
}
Editor is loading...