মডিউল ২_২ঃ বিএফএস কোড ইমপ্লিমেন্টেশন

আমরা এখন বিএফএস ট্রাভারসাল এলগোরিদমটি স্টেপ বাই স্টেপ কোড এ দেখার চেষ্টা করব।

```cpp
#include <bits/stdc++.h>
using namespace std;
vector<int> v[1005];
bool vis[1005];
void bfs(int src)
{
    queue<int> q;
    q.push(src);
    vis[src] = true;
    while (!q.empty())
    {
        int par = q.front();
        q.pop();
        cout << par << endl;
        for (int child : v[par])
        {
            if (vis[child] == false)
            {
                q.push(child);
                vis[child] = true;
            }
        }
    }
}
int main()
{
    int n, e;
    cin >> n >> e;
    while (e--)
    {
        int a, b;
        cin >> a >> b;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    int src;
    cin >> src;
    memset(vis, false, sizeof(vis));
    bfs(src);
    return 0;
}
```

এখানে প্রথমে আমরা মেইন ফাংশনটি বোঝার চেষ্টা করব। প্রথমে আমরা নোড সংখ্যা ও এডজ সংখ্যা ইনপুট নিয়েছি। এরপর একটি লুপের মাধ্যমে কোন নোড দুইটির মধ্যে এডজ থাকবে সেটা অ্যাডজেসেন্সি লিস্ট এর মধ্যে নিয়ে নিচ্ছি।

এবার সোর্স নোড ইনপুট নিয়ে ভিজিটেড এ্যারেটি ইনিশিয়ালাইজ করে নিচ্ছি false হিসেবে। সবশেষে bfs ফাংশনকে কল করছি।

এবার আমরা চলে আসি আমাদের আসল কাজে বিএফএস ফাংশনে। এখানে একটি কিউ নিয়েছি। আর ইনিশিয়ালি সোর্স ভ্যালুকে কিউতে পুশ করে দিয়েছি। আর সোর্স নোডকে ভিজিটেড করে দিলাম।

এবার কিউ এম্পটি না হওয়া অব্দি একটি লুপ চালাবো ও প্রতিবার কিউ এর ফ্রন্ট ভ্যালুকে নিব। তাকে প্রিন্ট করে কিউ থেকে পপ করে দিব। ওই এলিমেন্ট এর অ্যাডজেসেন্সি লিস্টে যাব ও সেই লিস্ট এর মধ্যে যেসকল নোড আনভিজিটেড আছে সেইসকল নোডকে কিউতে পুশ করব ও তাদেরকে ভিজিটেড এ্যারেতে true করে দেব।

এই হয়ে গেল আমাদের বিএফএস ট্রাভারসাল।

Last updated