algorithm
  • মডিউল ১ঃ গ্রাফের বেসিক ধারণা
    • মডিউল ১_০ঃ অ্যালগরিদম
    • মডিউল ১_১ঃ গ্রাফের বেসিক
    • মডিউল ১_২ঃ অ্যাডজাসেন্সি ম্যাট্রিক্স
    • মডিউল ১_৩ঃ অ্যাডজাসেন্সি ম্যাট্রিক্স ইমপ্লিমেন্টশন
    • মডিউল ১_৪ঃ অ্যাডজাসেন্সি লিস্ট
    • মডিউল ১_৫ঃ অ্যাডজাসেন্সি লিস্ট ইমপ্লিমেন্টশন
    • মডিউল ১_৬ঃ STL pair
    • মডিউল ১_৭ঃ Edge লিস্ট
  • মডিউল ২ঃ ব্রেডথ ফার্স্ট সার্চ
    • মডিউল ২_০ঃ ব্রেডথ ফার্স্ট সার্চ কি?
    • মডিউল ২_১ঃ বিএফএস এলগোরিদম
    • মডিউল ২_২ঃ বিএফএস কোড ইমপ্লিমেন্টেশন
    • মডিউল ২_৩ঃ বিএফএস লেভেল ট্র্যাকিং
    • মডিউল ২_৪ঃ কমপ্লেক্সিটি অ্যানালাইসিস
    • মডিউল ২_৫ঃ পাথ প্রিন্টিং
    • মডিউল ২_৬ঃ পাথ প্রিন্টিং ইমপ্লিমেন্টেশন
  • মডিউল ৩ঃ DFS এবং 2D গ্রীড
    • মডিউল ৩_০ঃ ইনট্রোডাকশন
    • মডিউল ৩_১ঃ DFS
    • মডিউল ৩_২ঃ DFS ইমপ্লিমেন্টশন
    • মডিউল ৩_৩ঃ 2D গ্রীড
    • মডিউল ৩_৪ঃ 2D গ্রীডে DFS ইমপ্লিমেন্টশন
    • মডিউল ৩_৫ঃ 2D গ্রীডে BFS ইমপ্লিমেন্টশন
  • মডিউল ৫ঃ Cycle Detection
    • মডিউল ৫_০ঃ ইনট্রোডাকশন
    • মডিউল ৫_১ঃ Cycle Detection Undirected গ্রাফে
    • মডিউল ৫_২ঃ Cycle Detection Undirected গ্রাফ BFS ইমপ্লিমেন্টশন
    • মডিউল ৫_৩ঃ Cycle Detection Undirected গ্রাফ DFS ইমপ্লিমেন্টশন
    • মডিউল ৫_৪ঃ Cycle Detection Directed গ্রাফে
    • মডিউল ৫_৫ঃ Cycle Detection Directed গ্রাফ DFS ইমপ্লিমেন্টশন
  • মডিউল ৬ঃ Dijkstra এলগরিদম
    • মডিউল ৬_০ঃ ইনট্রডাকশন
    • মডিউল ৬_১ঃ কেন Dijkstra এলগরিদম আমাদের প্রয়োজন?
    • মডিউল ৬_২ঃ পাথ রিলেক্সেশন
    • মডিউল ৬_৩ঃ Dijkstra Naive Approach
    • মডিউল ৬_৪ঃ Dijkstra Naive Approach Code
    • মডিউল ৬_৫ঃ Dijkstra Optimize Approach
    • মডিউল ৬_৭ঃ Dijkstra Optimize Code
  • মডিউল ৭ঃ Bellmanford এবং Floyd Warshall এলগোরিদম
    • মডিউল ৭_১ঃ কেন দরকার Bellmanford?
    • মডিউল ৭_২ঃ Bellmanford Algorithm
    • মডিউল ৭_৪ঃ Bellmanford Algorithm Code
    • মডিউল ৭_৫ঃ ডিটেক্ট নেগেটিভ সাইকেল
    • মডিউল ৭_৬ঃ কেন Floyd Warshall এলগোরিদম প্রয়োজন?
    • মডিউল ৭_৭ঃ Floyd Warshall Algorithm
    • মডিউল ৭_৮ঃ Floyd Warshall Algoritm Code
  • মডিউল ৯ঃ BFS , DFS দিয়ে Problem Solving
    • মডিউল ৯_০ঃ ইনট্রোডাকশন
    • মডিউল ৯_১ঃ Island Perimeter [Leetcode]
    • মডিউল ৯_২ঃ Find if Path Exists in Graph [Leetcode]
    • মডিউল ৯_৩ঃ Max Area of Island [Leetcode]
    • মডিউল ৯_৪ঃ Number of Islands [Leetcode]
    • মডিউল ৯_৫ঃ Count Sub Islands [Leetcode]
    • মডিউল ৯_৬ঃ Number of Closed Islands [Leetcode]
  • মডিউল ১০ঃ Disjoint Set Union
    • মডিউল ১০_০ঃ ইনট্রডাকশন
    • মডিউল ১০_১ঃ DSU কি?
    • মডিউল ১০_২ঃ Union Find কিভাবে কাজ করে?
    • মডিউল ১০_৩ঃ Find অপারেশন ইমপ্লিমেন্টেশন
    • মডিউল ১০_৫ঃ Union and Union by Size
    • মডিউল ১০_৭ঃ Union by rank
  • মডিউল ১১ঃ DSU Cycle Detection এবং MST
    • মডিউল ১১_০ঃ ইনট্রডাকশন
    • মডিউল ১১_১ঃ DSU দিয়ে Cycle Detection Undirected গ্রাফে
    • মডিউল ১১_২ঃ DSU দিয়ে Cycle Detection Undirected গ্রাফে ইমপ্লিমেন্টেশন
    • মডিউল ১১_৩ঃ Minimum Spanning Tree কি ?
    • মডিউল ১১_৪ঃ MST এর জন্য Kruskals Algorithm
    • মডিউল ১১_৫ঃ MST এর জন্য Kruskals Algorithm ইমপ্লিমেন্টেশন
  • মডিউল ১৩ঃ বেসিক গ্রাফ রিক্যাপ
    • মডিউল ১৩_০ঃ ইনট্রডাকশন
    • মডিউল ১৩_১ঃ এডজেসেন্সি ম্যাট্রিক্স
    • মডিউল ১৩_২ঃ এডজেসেন্সি লিস্ট ও এজ লিস্ট
    • মডিউল ১৩_৩ঃ এডজেসেন্সি লিস্ট টু এডজেসেন্সি ম্যাট্রিক্স পার্ট-১
    • মডিউল ১৩_৪ঃ এডজেসেন্সি লিস্ট টু এডজেসেন্সি ম্যাট্রিক্স পার্ট-২
    • মডিউল ১৩_৫ঃ এজ লিস্ট টু ম্যাট্রিক্স
    • মডিউল ১৩_৬ঃ এডজেসেন্সি ম্যাট্রিক্স টু এডজেসেন্সি লিস্ট
    • মডিউল ১৩_৭ঃ এজ লিস্ট টু এডজেসেন্সি লিস্ট
    • মডিউল ১৩_৮ঃ এডজেসেন্সি ম্যাট্রিক্স টু এজ লিস্ট
    • মডিউল ১৩_৯ঃ এডজেসেন্সি লিস্ট টু এজ লিস্ট
  • মডিউল ১৪ঃ প্রব্লেম সল্ভিং গ্রাফ অ্যালগরিদম দিয়ে
    • মডিউল ১৪_০ঃ ইনট্রডাকশন
    • মডিউল ১৪_১ঃ Romeo and Juliet
    • মডিউল ১৪_২ঃ Romeo and Juliet ইমপ্লিমেন্টেশন
    • মডিউল ১৪_৩ঃ Minimum Cost for Business
    • মডিউল ১৪_৪ঃ Dijkstra Path Printing
    • মডিউল ১৪_৫ঃ Building Roads
    • মডিউল ১৪_৬ঃ Building Roads ইমপ্লিমেন্টেশন
    • মডিউল ১৪_৭ঃ Message Routes
  • মডিউল ১৫ঃ প্রব্লেম সল্ভিং ২ গ্রাফ অ্যালগরিদম দিয়ে
    • মডিউল ১৫_০ঃ ইনট্রডাকশন
    • মডিউল ১৫_১ঃ Sundorban ইমপ্লিমেন্টেশন সহ
    • মডিউল ১৫_২ঃ Guilty Prince ইমপ্লিমেন্টেশন সহ
    • মডিউল ১৫_৩ঃ Commandos
    • মডিউল ১৫_৪ঃ Commandos ইমপ্লিমেন্টেশন
    • মডিউল ১৫_৫ঃ D. Roads not only in Berland
    • মডিউল ১৫_৬ঃ D. Roads not only in Berland ইমপ্লিমেন্টেশন
  • মডিউল ১৭ঃ বেসিক ডাইনামিক প্রোগামিং
    • মডিউল ১৭_০ঃ ইনট্রডাকশন
    • মডিউল ১৭_১ঃ ডাইনামিক প্রোগ্রামিং কি?
    • মডিউল ১৭_২ঃ ফ্যাক্টোরিয়াল নাম্বার
    • মডিউল ১৭_৩ঃ Fibonacci Series
    • মডিউল ১৭_৪ঃ Fibonacci Subproblem
    • মডিউল ১৭_৬ঃ Fibonacci Memoization
    • মডিউল ১৭_৭ঃ Bottom up approach in Fibonacci series
  • মডিউল ১৮ঃ Knapsack
    • মডিউল ১৮_০ঃ ইনট্রডাকশন
    • মডিউল ১৮_১ঃ Knapsack
    • মডিউল ১৮_২ঃ Knapsack Recursive Approach
    • মডিউল ১৮_৪ঃ Knapsack Top Down Approach ইমপ্লিমেন্টেশনসহ
    • মডিউল ১৮_৫ঃ Knapsack Bottom Up Approach
    • মডিউল ১৮_৬ঃ Knapsack Bottom Up ইমপ্লিমেন্টেশন
  • মডিউল ১৯ঃ 0-1 Knapsack Variation
    • মডিউল ১৯_০ঃ ইনট্রডাকশন
    • মডিউল ১৯_১ঃ সাবসেট সাম টপ ডাউন
    • মডিউল ১৯_২ঃ সাবসেট সাম Bottom up
    • মডিউল ১৯_৩ঃ Count of Subset Sum
    • মডিউল ১৯_৪ঃ Count no of Zeroes in Subset
    • মডিউল ১৯_৫ঃ Equal Sum Partition
    • মডিউল ১৯_৬ঃ Minimum Subset Sum
    • মডিউল ১৯_৭ঃ Count Subset Sum with given difference
    • মডিউল ১৯_৮ঃ Target Sum
  • বোনাস মডিউল ২১ঃ Unbounded Knapsack
    • মডিউল ২১_১ঃ Unbounded Knapsack Approach
    • মডিউল ২১_২ঃ Unbounded Knapsack ইমপ্লিমেন্টেশন
    • মডিউল ২১_৩ঃ Rod Cutting Problem
    • মডিউল ২১_৪ঃ Coin Change 1
    • মডিউল ২১_৫ঃ Coin Change 2
  • বোনাস মডিউল ২২ঃ Longest Common Subsequence
    • মডিউল ২২_১ঃ Substring vs Subsequence
    • মডিউল ২২_২ঃ Longest Common Subsequence Approach
    • মডিউল ২২_৩ঃ LCS Top Down Implementation
    • মডিউল ২২_৪ঃ LCS Bottom Up Implementation
    • মডিউল ২২_৫ঃ LCS Table Fill Up
    • মডিউল ২২_৬ঃ Printing LCS Approach
    • মডিউল ২২_৭ঃ Printing LCS Implementation
    • মডিউল ২২_৮ঃ Longest Common Substring Bottom Up and Printing
  • বোনাস মডিউল ২৩ঃ Merge Sort
    • মডিউল ২৩_০ঃ ইনট্রডাকশন
    • মডিউল ২৩_১ঃ Merge Two Sorted Arrays
    • মডিউল ২৩_২ঃ Merge two sorted array implementation
    • মডিউল ২৩_৩ঃ How Divide Works in Merge Sort
    • মডিউল ২৩_৪ঃ Merge Sort
  • মডিউল ২ঃ ব্রেডথ ফার্স্ট সার্চ
    • Untitled
    • Page 2
Powered by GitBook
On this page
  1. মডিউল ২ঃ ব্রেডথ ফার্স্ট সার্চ

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

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

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

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

Previousমডিউল ২_১ঃ বিএফএস এলগোরিদমNextমডিউল ২_৩ঃ বিএফএস লেভেল ট্র্যাকিং

Last updated 1 year ago