কম্পিউটার টিউটোরিয়াল

C++ দিয়ে BFS ব্যবহার করে একটি ভার্টেক্স থেকে বাকি সব ভার্টেক্সে পথ বের করা


এই সমস্যাতে, আমাদের একটি ডায়रेक्टেড গ্রাফ দেওয়া আছে যা অডজেসেন্সি লিস্ট (adjacency list) আকারে রিপ্রেজেন্ট করা। আমাদের কাজ হল BFS ব্যবহার করে একটি ভার্টেক্স থেকে বাকি সব ভার্টেক্সে পথ বের করার প্রোগ্রাম তৈরি করা।

BFS (Breadth First Search) হল একটি অ্যালগরিদম যা গ্রাফকে ব্রেডথওয়ার্ড মোশনে ট্রাভার্স করে এবং একটি কিউ ব্যবহার করে নেক্সট ভার্টেক্স মনে রাখে সার্চ শুরু করার জন্য, যখন কোনো ইটারেশনে ডেড এন্ড হয়।

উদাহরণ দেখি:

ইনপুট -

C++ দিয়ে BFS ব্যবহার করে একটি ভার্টেক্স থেকে বাকি সব ভার্টেক্সে পথ বের করা

আউটপুট

S

A <= S

B <= A <= S

C <= S

D <= C <= S

সমাধানের পদ্ধতি

সমাধানের জন্য, আমরা গ্রাফের প্রতিটি এলিমেন্টে BFS সার্চ অ্যালগরিদম পারফর্ম করব। এই কাজের জন্য, আমরা একটি কিউ তৈরি করব যেটি যেকোনো নোডে ভিজিটের ফ্ল্যাগ স্টোর করবে। তারপর, একটি ভিজিটেড অ্যারে ব্যবহার করে চেক করব যে এলিমেন্টটি ভিজিটেড কিনা (বাইনারি ভ্যালু ০ এবং ১ দিয়ে ভিজিট ডিনোট করা)।

এখন, আমরা উদাহরণটি ধাপে ধাপে সমাধান করব:

C++ দিয়ে BFS ব্যবহার করে একটি ভার্টেক্স থেকে বাকি সব ভার্টেক্সে পথ বের করা

নোড S থেকে শুরু করলে,

  • নোড A-তে সরাসরি যাব।

  • নোড B-এ যেতে হলে প্রথমে নোড A-তে যাব, তারপর A ট্রাভার্স করে B-এ যাব।

  • নোড C-এ যেতে হলে S থেকে সরাসরি C-এ যাব।

  • নোড D-এ যেতে হলে প্রথমে নোড C-এ যাব, তারপর D-এ যাব।

উদাহরণ

#include <bits/stdc++.h> using namespace std; void printPath(vector<int> parent, int initial, int node){ while (initial != node){ cout<<node<<" <= "; node = parent[node]; } cout<<node<<endl; } void findPathBFS(vector<vector<int> > graphAdjList, int initial, int graphSize){ vector<int> parent(graphSize, 0); vector<int> queue(graphSize, 0); int front = -1, rear = -1; vector<int> isVisited(graphSize, 0); isVisited[0] = 1; parent[0] = initial; queue[++rear] = initial; int k; while (front != rear) { k = queue[++front]; for (int j:graphAdjList[k]){ if (isVisited[j] == 0){ queue[++rear] = j; isVisited[j] = 1; parent[j] = k; } } } for (k = 0; k < graphSize; k++) printPath(parent, initial, k); } int main(){ vector<vector<int> > graphAdjList; graphAdjList.push_back({1, 3}); graphAdjList.push_back({0, 2}); graphAdjList.push_back({1}); graphAdjList.push_back({4}); graphAdjList.push_back({0}); int graphSize = graphAdjList.size(); int initial = 0; cout<<"The Path from vertex '0' to all other vertex in the graph is : \n"; findPathBFS(graphAdjList, initial, graphSize); }

আউটপুট

The Path from vertex '0' to all other vertex in the graph is : 0 1 <= 0 2 <= 1 <= 0 3 <= 0 4 <= 3 <= 0

  1. সি++ প্রোগ্রাম: বাইনারি ট্রি (Binary Tree)-এর বিজোড় লেভেল (Odd Level)-এ থাকা নোডগুলো প্রিন্ট করা

  2. C++-এ একটি স্ট্যাক ব্যবহার করে বাইনারি ট্রির লিফ নোডগুলো বাম থেকে ডান প্রিন্ট করা

  3. C++ প্রোগ্রাম: BFS ব্যবহার করে ডিরেক্টেড গ্রাফের কানেক্টিভিটি চেক করা

  4. C++ প্রোগ্রাম: BFS ব্যবহার করে অনডিরেক্টেড গ্রাফের কানেক্টিভিটি চেক করা