কম্পিউটার

C++-এ গাছের যেকোনো দুটি শীর্ষবিন্দুর মধ্যে ডিগ্রীর গুণফলের যোগফল সর্বাধিক করুন


প্রদত্ত কাজটি হল একটি প্রদত্ত পূর্ণসংখ্যা N দিয়ে একটি গাছ তৈরি করা যাতে, সমস্ত অর্ডার করা জোড়ার (x,y) জন্য ডিগ্রি(x) * ডিগ্রি(y) এর যোগফল সর্বাধিক এবং x y এর সমান নয়।

ইনপুট −N=5

আউটপুট −50

ব্যাখ্যা

   1
    \
     2
      \
       3
         \
          4
            \
             5
Degree of 1st node = 1
Degree of 2nd node = 2
Degree of 3rd node = 2
Degree of 4th node = 2
Degree of 5th node = 1

সমস্ত অর্ডার করা জোড়ার জন্য সমস্ত ডিগ্রীর পণ্য (x, y) −

1st node = 1*2 + 1*2 + 1*2 + 1*1 = 7
2nd node = 2*1 + 2*2 + 2*2 + 2*1 = 12
3rd node = 2*1 + 2*2 + 2*2 + 2*1 = 12
4th node = 2*1 + 2*2 + 2*2 + 2*1 = 12
5th node = 1*2 + 1*2 + 1*2 + 1*1 = 7
Total sum = 50

ইনপুট −N=7

আউটপুট −122

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

  • একটি গাছের সমস্ত নোডের ডিগ্রীর সমষ্টি হল − (2 * N) – 2. এখানে N =গাছে নোডের সংখ্যা। যোগফল সর্বাধিক করার জন্য, লিফ নোডের সংখ্যা কমিয়ে আনতে হবে।

  • ইনসাইড ম্যাক্স() ফাংশন int sum=0 আরম্ভ করে এবং x শর্তে x=1 এবং y=1 শুরু করে নেস্টেড লুপ তৈরি করে।

  • নেস্টেড লুপের ভিতরে প্রথমে চেক করুন if(x==y), যদি তাই হয় তাহলে continue যোগ করুন; বিবৃতি

  • অন্যথায় int degree=2 আরম্ভ করুন এবং if স্টেটমেন্ট ব্যবহার করে চেক করুন if(x==1 || x==n)। যদি তাই হয় তাহলে ডিগ্রিএক্স=1 লিখুন। তারপর int degree=2 আরম্ভ করুন এবং ভ্যারিয়েবল y

    এর জন্য একই কাজ করুন
  • অবশেষে, লুপগুলি বন্ধ করার আগে, − sum =(degreeX + degreeY)

    লিখে যোগফল পরিবর্তন করুন

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
int Max(int N){
   int sum = 0;
   for (int x = 1; x <= N; x++){
      for (int y = 1; y <= N; y++){
         if (x == y)
            continue;
         //Initializing degree for node x to 2
         int degreeX = 2;
         //If x is the leaf node or the root node
         if (x == 1 || x == N)
            degreeX = 1;
         //Initializing degree for node y to 2
         int degreeY = 2;
         //If y is the leaf node or the root node
         if (y == 1 || y == N)
            degreeY = 1;
         //Updating sum
         sum += (degreeX * degreeY);
      }
   }
   return sum;
}
//Main function
int main(){
   int N = 5;
   cout << Max(N);
}

আউটপুট

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

50

  1. একটি সম্পূর্ণ বাইনারি গাছের মিরর ইমেজ নোডের সমষ্টি C++ এ একটি ক্রমানুসারে

  2. C++ এ বাইনারি ট্রিতে যেকোনো দুটি নোডের মধ্যবর্তী পথের XOR

  3. C++ এ একটি বাইনারি গাছের নিকটতম পাতাটি খুঁজুন

  4. C++ প্রোগ্রামিং-এ বাইনারি ট্রিতে যেকোনো দুটি নোডের মধ্যে প্রিন্ট পাথ।