কম্পিউটার

C++ এ একটি বনে গাছের সংখ্যা গণনা করুন


প্রদত্ত একটি বনের শীর্ষবিন্দু (গাছের সংগ্রহ)। লক্ষ্য হল সেই বনে গাছের সংখ্যা বের করা। আমরা বনে একটি DFS (গভীরতার প্রথম অনুসন্ধান) অ্যালগরিদম চালিয়ে এটি করব৷

উদাহরণস্বরূপ

ইনপুট

edges = { { 1,3 }, {2,8}, {2,6}, {3,5}, {3,7}, {4,8} }

আউটপুট

Count of number of trees in a forest are: 3

ব্যাখ্যা

বনে থাকা গাছের সংখ্যা হল −

C++ এ একটি বনে গাছের সংখ্যা গণনা করুন

নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি

এই পদ্ধতিতে আমরা গ্রাফে পুনরাবৃত্তভাবে ডেপথ ফার্স্ট সার্চ অ্যালগরিদম প্রয়োগ করি। প্রতিটি সংযুক্ত নোডকে একটি উৎস থেকে পরিদর্শন করা হলে আমরা গণনা বৃদ্ধি করব (যার মানে একটি গাছ তৈরি হয়)।

  • একটি গ্রাফে অনেকগুলি শীর্ষবিন্দু হিসাবে একটি পূর্ণসংখ্যার শীর্ষবিন্দু নিন৷

  • পূর্ণসংখ্যা হিসাবে শীর্ষবিন্দু সংরক্ষণের জন্য একটি ভেক্টর ভেক্টর vec[vertice] নিন।

  • ফাংশন সন্নিবেশ (ভেক্টর vec[], int পিতামাতা, int চাইল্ড) vec[] নেয় এবং সেই ভেক্টরে পিতামাতা এবং শিশুর মধ্যে একটি প্রান্ত যোগ করে।

  • vec[parent].push_back(child) এবং vec[child].push_back(parent) ব্যবহার করে প্রান্ত যোগ করুন।

  • পুনরাবৃত্ত ফাংশন (int temp, vector vec[], vector &check) গ্রাফে শুরু ভার্টেক্স টেম্প থেকে DFS প্রয়োগ করে।

  • অ্যারে চেক[টেম্প] সত্য/মিথ্যা ব্যবহার করে নোডকে ভিজিট/অভিজিটেড হিসেবে সেট করতে ব্যবহৃত হয়।

  • ট্রাভার্স ভেক্টর vec[] লুপের জন্য ব্যবহার করে এবং চেক[vec[temp][i]] মিথ্যা হলে সংযুক্ত নোডের জন্য পুনরাবৃত্তভাবে (vec[temp][i], vec, check) কল করুন।

  • ফাংশন Trees_Forest(vector vec[], int vertice) vec[] নেয় এবং vec[]-এ সংলগ্ন তালিকা হিসাবে দেওয়া বনের গাছের সংখ্যা ফেরত দেয়।

  • বনের প্রাথমিক গণনা 0 হিসাবে নিন।

  • গ্রাফের শীর্ষবিন্দুগুলিকে পরিদর্শন করা হিসাবে চিহ্নিত করতে ভেক্টর চেক (উল্লম্ব, মিথ্যা) নিন।

  • লুপ ব্যবহার করে সমস্ত শীর্ষবিন্দু অতিক্রম করুন৷

  • চেক[i] মিথ্যা হলে পুনরাবৃত্ত (i, vec, check) এবং incrementcount ব্যবহার করে dfs প্রয়োগ করুন।

  • সমস্ত লুপের শেষে ফলাফল হিসাবে গণনা ফিরে আসে।

উদাহরণ

#include<bits/stdc++.h>
using namespace std;
void insert(vector<int> vec[], int parent, int child){
   vec[parent].push_back(child);
   vec[child].push_back(parent);
}
void recurred(int temp, vector<int> vec[], vector<bool> &check){
   check[temp] = true;
   int size = vec[temp].size();
   for(int i = 0; i < size; i++){
      if (check[vec[temp][i]] == false){
         recurred(vec[temp][i], vec, check);
      }
   }
}
int Trees_Forest(vector<int> vec[], int vertice){
   int count = 0;
   vector<bool> check(vertice, false);
   for(int i = 0; i < vertice; i++){
      if(check[i] == false){
         recurred(i, vec, check);
         count++;
      }
   }
   return count;
}
int main(){
   int vertice = 9;
   vector<int> vec[vertice];
   insert(vec, 1, 3);
   insert(vec, 2, 8);
   insert(vec, 2, 6);
   insert(vec, 3, 5);
   insert(vec, 3, 7);
   insert(vec, 4, 8);
   cout<<"Count of number of trees in a forest are: "<<Trees_Forest(vec, vertice);
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −

উৎপন্ন করবে
Count of number of trees in a forest are: 3

  1. C++ এ একটি সমতলে সমান্তরালগ্রামের গণনা

  2. C++ এ একটি সংখ্যার আদিম

  3. C++ এ পাটিগণিত সংখ্যা

  4. C++ এ CHAR_BIT