কম্পিউটার

C++ এ প্রদত্ত সীমাবদ্ধতা সহ একটি ম্যাট্রিক্সে দীর্ঘতম পথ খুঁজুন


ধরুন আমাদের ক্রম n এর একটি বর্গ ম্যাট্রিক্স আছে। এটির সমস্ত স্বতন্ত্র উপাদান রয়েছে। সুতরাং আমাদের সর্বাধিক দৈর্ঘ্যের পথটি খুঁজে বের করতে হবে, যেমন পথ বরাবর সমস্ত কোষ 1 এর পার্থক্যের সাথে ক্রমবর্ধমান ক্রমে রয়েছে। একটি ঘর থেকে আমরা চারটি দিকে যেতে পারি। বাম, ডান, উপরে এবং নীচে। তাই ম্যাট্রিক্স যদি −

এর মত হয়
1 2 9
5 3 8
4 6 7

সুতরাং আউটপুট হবে 4। যেহেতু দীর্ঘতম পথ হল 6→7→8→9

এই সমস্যা সমাধানের জন্য, আমরা এই ধারণা অনুসরণ করব। আমরা প্রতিটি ঘর থেকে শুরু করে দীর্ঘতম পথ গণনা করব। একবার আমরা সমস্ত কক্ষের জন্য দীর্ঘতম পেয়ে গেলে, আমরা সর্বাধিক দীর্ঘতম পথগুলি ফেরত দিই৷

এই পদ্ধতির একটি গুরুত্বপূর্ণ পর্যবেক্ষণ হল অনেক ওভারল্যাপিং উপ-সমস্যা। তাই ডায়নামিক প্রোগ্রামিং ব্যবহার করে এই সমস্যার সমাধান করা যায়। এখানে আমরা একটি লুকআপ টেবিল dp[][] ব্যবহার করব যাতে কোনো সমস্যা ইতিমধ্যেই সমাধান হয়েছে কিনা।

উদাহরণ

#include <iostream>
#define n 3
using namespace std;
int getLongestPathLengthUtil(int i, int j, int matrix[n][n], int table[n][n]) {
   if (i < 0 || i >= n || j < 0 || j >= n)
   return 0;
   if (table[i][j] != -1)
      return table[i][j];
   int x = INT_MIN, y = INT_MIN, z = INT_MIN, w = INT_MIN;
   if (j < n - 1 && ((matrix[i][j] + 1) == matrix[i][j + 1]))
      x = 1 + getLongestPathLengthUtil(i, j + 1, matrix, table);
   if (j > 0 && (matrix[i][j] + 1 == matrix[i][j - 1]))
      y = 1 + getLongestPathLengthUtil(i, j - 1, matrix, table);
   if (i > 0 && (matrix[i][j] + 1 == matrix[i - 1][j]))
      z = 1 + getLongestPathLengthUtil(i - 1, j, matrix, table);
   if (i < n - 1 && (matrix[i][j] + 1 == matrix[i + 1][j]))
      w = 1 + getLongestPathLengthUtil(i + 1, j, matrix, table);
      return table[i][j] = max(x, max(y, max(z, max(w, 1))));
}
int getLongestPathLength(int matrix[n][n]) {
   int result = 1;
   int table[n][n];
   for(int i = 0; i < n; i++)
   for(int j = 0; j < n; j++)
   table[i][j] = -1;
   for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
         if (table[i][j] == -1)
         getLongestPathLengthUtil(i, j, matrix, table);
         result = max(result, table[i][j]);
      }
   }
   return result;
}
int main() {
   int mat[n][n] = { { 1, 2, 9 },
   { 5, 3, 8 },
   { 4, 6, 7 } };
   cout << "Length of the longest path is "<< getLongestPathLength(mat);
}

আউটপুট

Length of the longest path is 4

  1. C++ এ প্রদত্ত প্রারম্ভিক অক্ষর থেকে দীর্ঘতম ধারাবাহিক পথের দৈর্ঘ্য খুঁজুন

  2. প্রদত্ত পণ্যের সাথে একটি জোড়া C++ এ ম্যাট্রিক্সে বিদ্যমান কিনা তা পরীক্ষা করুন

  3. C++ এ প্রদত্ত সূচক সহ N Fibonacci সংখ্যার GCD খুঁজুন

  4. একটি প্রদত্ত সিকোয়েন্সের দীর্ঘতম ক্রমবর্ধমান অনুক্রম খুঁজে পেতে C++ প্রোগ্রাম