Breadth First Search(BFS)

#include<bits/stdc++.h>
#define White 1
#define Gray 2
#define Black 3
using namespace std;

int node, edge, a[1000][1000], color[1000], dis[1000], parent[1000];

void bfs(int StartNode)
{
    for(int i=0; i<node; i++)
    {
        color[i] = White;
        dis[i] = INT_MIN;
        parent[i] = -1;
    }

    dis[StartNode] = 0;
    parent[StartNode] = -1;

    queue<int>q;
    q.push(StartNode);

    while(!q.empty())
    {
        int x = q.front();
        q.pop();

        color[x] = Gray;

        for(int i=0;i<node;i++)
        {
            if(a[x][i] == 1)
            {
                if(color[i] == White)
                {
                    dis[i] = dis[x] + 1;
                    parent[i] = x;
                    q.push(i);
                }
            }
        }

        color[x] = Black;
        cout << x << " Node is Black." << "\n";
    }
}

 
int main()
{
    cout << "Enter Node Number :: ";
    cin >> node;

    cout << "\nEnter Edge Number :: ";
    cin >> edge;

    int n1, n2;

    cout << "\nEnter Edges :: \n";
    for(int i=1;i<=edge;i++)
    {
        cin >> n1 >> n2;
        a[n1][n2] = 1;
        a[n2][n1] = 1;
    }

    bfs(0);

    cout << "\nRoot Node To Other Node Distance :: \n";
    for(int i=0;i<node;i++)
    {
        cout << "Node " << i << " Distance :: " << dis[i] << "\n";
    }

    cout << "\nParent Each Node :: \n";
    for(int i=0;i<node;i++)
    {
        cout << "Node " << i << " Parent Node :: " << parent[i] << "\n";
    }

    return 0;
}


Comments