কম্পিউটার

ট্রিপলেট খুঁজুন যাতে এই ট্রিপলেটগুলিকে সংযোগকারী নোডের সংখ্যা C++ এ সর্বাধিক হয়


এই টিউটোরিয়ালে, আমরা ট্রিপলেট খুঁজে বের করার জন্য একটি প্রোগ্রাম নিয়ে আলোচনা করব যাতে এই ট্রিপলেটগুলিকে সংযোগকারী নোডের সংখ্যা সর্বাধিক।

এর জন্য আমাদের N নোড সহ একটি গাছ দেওয়া হবে। আমাদের কাজ হল নোডগুলির একটি ট্রিপলেট খুঁজে বের করা যাতে পথের মধ্যে থাকা নোডগুলি তাদের সাথে সর্বাধিক যোগ দেয়৷

উদাহরণ

#include <bits/stdc++.h>
#define ll long long int
#define MAX 100005
using namespace std;
vector<int> nearNode[MAX];
bool isTraversed[MAX];
//storing the required nodes
int maxi = -1, N;
int parent[MAX];
bool vis[MAX];
int startnode, endnode, midNode;
//implementing DFS to search nodes
void performDFS(int u, int count) {
   isTraversed[u] = true;
   int temp = 0;
   for (int i = 0; i < nearNode[u].size(); i++) {
      if (!isTraversed[nearNode[u][i]]) {
         temp++;
         performDFS(nearNode[u][i], count + 1);
      }
   }
   if (temp == 0) {
      if (maxi < count) {
         maxi = count;
         startnode = u;
      }
   }
}
void performDFS2(int u, int count) {
   isTraversed[u] = true;
   int temp = 0;
   for (int i = 0; i < nearNode[u].size(); i++) {
      if (!isTraversed[nearNode[u][i]] && !vis[nearNode[u][i]]) {
         temp++;
         performDFS2(nearNode[u][i], count + 1);
      }
   }
   if (temp == 0) {
      if (maxi < count) {
         maxi = count;
         midNode = u;
      }
   }
}
//finding endnote of diameter
void performDFS1(int u, int count) {
   isTraversed[u] = true;
   int temp = 0;
   for (int i = 0; i < nearNode[u].size(); i++) {
      if (!isTraversed[nearNode[u][i]]) {
         temp++;
         parent[nearNode[u][i]] = u;
         performDFS1(nearNode[u][i], count + 1);
      }
   }
   if (temp == 0) {
      if (maxi < count) {
         maxi = count;
         endnode = u;
      }
   }
}
void calcTreeVertices() {
   performDFS(1, 0);
   for (int i = 0; i <= N; i++)
      isTraversed[i] = false;
   maxi = -1;
   performDFS1(startnode, 0);
   for (int i = 0; i <= N; i++)
      isTraversed[i] = false;
   int x = endnode;
   vis[startnode] = true;
   while (x != startnode) {
      vis[x] = true;
      x = parent[x];
   }
   maxi = -1;
   for (int i = 1; i <= N; i++) {
      if (vis[i])
         performDFS2(i, 0);
   }
}
int main() {
   N = 4;
   nearNode[1].push_back(6);
   nearNode[2].push_back(0);
   nearNode[1].push_back(7);
   nearNode[3].push_back(0);
   nearNode[1].push_back(2);
   nearNode[4].push_back(0);
   calcTreeVertices();
   cout << "Nodes: (" << startnode << ", " << endnode << ", " << midNode << ")";
   return 0;
}

আউটপুট

Nodes: (0, 0, 0)

  1. C++ ব্যবহার করে একটি অ্যারেতে জোড়ার সংখ্যা খুঁজুন যাতে তাদের XOR 0 হয়।

  2. একটি অ্যারে উপাদান খুঁজুন যাতে সমস্ত উপাদান এটি দ্বারা c++ ব্যবহার করে বিভাজ্য হয়

  3. C++ ব্যবহার করে x-এর যোগফল এবং এর অঙ্কগুলো n-এর সমান হয় এমন একটি সংখ্যা খুঁজুন।

  4. x এর সমষ্টি এবং এর সংখ্যা C++ এ দেওয়া n-এর সমান