কম্পিউটার

C++ এ BFS ব্যবহার করে একটি শীর্ষবিন্দু থেকে বিশ্রামের পথ খোঁজা


এই সমস্যায়, আমাদের একটি সংলগ্ন তালিকা হিসাবে উপস্থাপিত একটি নির্দেশিত গ্রাফ দেওয়া হয়েছে। আমাদের কাজ হল BFS ব্যবহার করে একটি শিরোনাম থেকে বিশ্রামের পথ খোঁজার জন্য একটি প্রোগ্রাম তৈরি করা .

BFS (ব্রেডথ ফার্স্ট সার্চ) হল একটি অ্যালগরিদম যা একটি প্রশস্ত গতিতে একটি গ্রাফকে অতিক্রম করে এবং একটি সারি ব্যবহার করে একটি অনুসন্ধান শুরু করার জন্য পরবর্তী শীর্ষটি মনে রাখার জন্য, যখন কোনো পুনরাবৃত্তিতে একটি শেষ প্রান্ত ঘটে।

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,

ইনপুট

C++ এ BFS ব্যবহার করে একটি শীর্ষবিন্দু থেকে বিশ্রামের পথ খোঁজা

আউটপুট

এস

A <=S

B <=A <=S

C <=S

D <=C <=S

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

সমস্যা সমাধানের জন্য, আমরা গ্রাফের প্রতিটি উপাদানে BFS অনুসন্ধান অ্যালগরিদম সম্পাদন করব। কাজটি সম্পাদন করার জন্য, আমরা একটি সারি তৈরি করব যা যেকোনো নোডে ভিজিট করার জন্য পতাকা সংরক্ষণ করবে। তারপর, একটি পরিদর্শন করা অ্যারে ব্যবহার করে আমরা উপাদানটি পরিদর্শন করা হয়েছে কিনা তা পরীক্ষা করব (বাইনারী মান 0 এবং 1 ভিজিট নির্দেশ করে)।

এখন, আমরা আমাদের সমাধানের কাজ বোঝার জন্য ধাপে ধাপে উদাহরণটি সমাধান করব,

C++ এ BFS ব্যবহার করে একটি শীর্ষবিন্দু থেকে বিশ্রামের পথ খোঁজা

নোড S,

থেকে শুরু
  • আমরা সরাসরি নোড এ পরিদর্শন করব।

  • নোড বি-তে পৌঁছানোর জন্য, আমরা প্রথমে নোড এ পরিদর্শন করব তারপর নোড বি ট্রাভার্সিং নোড এ পৌঁছাব।

  • নোড C-এ পৌঁছানোর জন্য, আমরা সরাসরি S থেকে C পরিদর্শন করব।

  • নোড ডি তে পৌঁছানোর জন্য, আমরা প্রথমে নোড সি এবং তারপর নোড ডি

    পরিদর্শন করব

উদাহরণ

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম

#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. C++ ব্যবহার করে একটি গাছের বিজোড় স্তরে নোডগুলি প্রিন্ট করার জন্য প্রোগ্রাম

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

  3. BFS ব্যবহার করে নির্দেশিত গ্রাফের সংযোগ পরীক্ষা করার জন্য C++ প্রোগ্রাম

  4. BFS ব্যবহার করে অনির্দেশিত গ্রাফের সংযোগ পরীক্ষা করার জন্য C++ প্রোগ্রাম