মডিউল ২_২ঃ বিএফএস কোড ইমপ্লিমেন্টেশন
আমরা এখন বিএফএস ট্রাভারসাল এলগোরিদমটি স্টেপ বাই স্টেপ কোড এ দেখার চেষ্টা করব।
```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;
}
```
এখানে প্রথমে আমরা মেইন ফাংশনটি বোঝার চেষ্টা করব। প্রথমে আমরা নোড সংখ্যা ও এডজ সংখ্যা ইনপুট নিয়েছি। এরপর একটি লুপের মাধ্যমে কোন নোড দুইটির মধ্যে এডজ থাকবে সেটা অ্যাডজেসেন্সি লিস্ট এর মধ্যে নিয়ে নিচ্ছি।
// Some code
int n, e;
cin >> n >> e;
while (e--)
{
int a, b;
cin >> a >> b;
v[a].push_back(b);
v[b].push_back(a);
}
এবার সোর্স নোড ইনপুট নিয়ে ভিজিটেড এ্যারেটি ইনিশিয়ালাইজ করে নিচ্ছি false হিসেবে। সবশেষে bfs ফাংশনকে কল করছি।
// Some code
int src;
cin >> src;
memset(vis, false, sizeof(vis));
bfs(src);
এবার আমরা চলে আসি আমাদের আসল কাজে বিএফএস ফাংশনে। এখানে একটি কিউ নিয়েছি। আর ইনিশিয়ালি সোর্স ভ্যালুকে কিউতে পুশ করে দিয়েছি। আর সোর্স নোডকে ভিজিটেড করে দিলাম।
// Some code
queue<int> q;
q.push(src);
vis[src] = true;
এবার কিউ এম্পটি না হওয়া অব্দি একটি লুপ চালাবো ও প্রতিবার কিউ এর ফ্রন্ট ভ্যালুকে নিব। তাকে প্রিন্ট করে কিউ থেকে পপ করে দিব। ওই এলিমেন্ট এর অ্যাডজেসেন্সি লিস্টে যাব ও সেই লিস্ট এর মধ্যে যেসকল নোড আনভিজিটেড আছে সেইসকল নোডকে কিউতে পুশ করব ও তাদেরকে ভিজিটেড এ্যারেতে true করে দেব।
// Some code
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;
}
}
}
এই হয়ে গেল আমাদের বিএফএস ট্রাভারসাল।
Last updated