কম্পিউটার টিউটোরিয়াল

C++ প্রোগ্রাম: গ্রিডে সম সংখ্যাযুক্ত কক্ষের সংখ্যা সর্বাধিক করতে অপারেশন গণনা


মান लीजिए, h × w মাত্রার একটি গ্রিড দেওয়া আছে। গ্রিডের প্রতিটি কক্ষে একটি নির্দিষ্ট মান অর্পিত। আমাদের লক্ষ্য হলো সম মানযুক্ত কক্ষের সংখ্যা সর্বাধিক করা। এর জন্য, আমরা একটি কক্ষ নির্বাচন করতে পারি যা পূর্বে নির্বাচিত হয়নি, এবং তারপর ওই কক্ষের মান ১ কমিয়ে, বর্তমান কক্ষের খাড়া বা দাঁড়ি থেকে সংলগ্ন অন্য একটি কক্ষের মান ১ বাড়াতে পারি। আমরা অপারেশনের সংখ্যা এবং কমানো ও বাড়ানো কক্ষের অবস্থান প্রিন্ট করব। আউটপুটের ফরম্যাট নিচের মতো হবে:

  • অপারেশনের সংখ্যা

  • ১ম (কমানো কক্ষের অবস্থান) - (বাড়ানো কক্ষের অবস্থান)

    ....

  • n-তম (কমানো কক্ষের অবস্থান) - (বাড়ানো কক্ষের অবস্থান)

যেমন, ইনপুট হলে h = 3, w = 3, grid = {{2, 3, 4}, {2, 0, 1}, {1, 2, 3}}, তবে আউটপুট হবে:

4 (0, 1) - (0, 2) (2, 0) - (2, 1) (2, 1) - (2, 2) (0, 2) - (1, 2)

সমাধানের ধাপসমূহ

এই সমস্যাটি সমাধান করার জন্য নিচের ধাপগুলো অনুসরণ করব:

নতুন একটি অ্যারে result সংজ্ঞায়িত করুন যা টাপল ধারণ করবে  i := 0 দিয়ে আরম্ভ করুন, i < h হলে, (i ১ বাড়িয়ে) করুন:    tp := 0    j := 0 দিয়ে আরম্ভ করুন, j < w হলে, (j ১ বাড়িয়ে) করুন:      if tp > 0, তবে:        টাপল (i, j-1, i, j) result-র শেষে যোগ করুন        grid[i, j] := grid[i, j] + tp      if grid[i, j] mod 2 == 1 এবং j < w-1, তবে:        grid[i, j] := grid[i, j] - 1        tp := 1      অন্যথায়        tp := 0  tp := 0  i := 0 দিয়ে আরম্ভ করুন, i < h হলে, (i ১ বাড়িয়ে) করুন:    if tp > 0, তবে:      টাপল (i-1, w-1, i, w-1) result-র শেষে যোগ করুন      grid[i, w-1] := grid[i, w-1] + tp    if grid[i, w-1] mod 2 == 1, তবে:      grid[i, w-1] := grid[i, w-1] - 1      tp := 1    অন্যথায়      tp := 0  result-র আকার প্রিন্ট করুন  i := 0 দিয়ে আরম্ভ করুন, i < result-র আকার হলে, (i ১ বাড়িয়ে) করুন:    প্রিন্ট করুন: '(' + result[i]-র ১ম মান + ',' + result[i]-র ২য় মান + ')- (' + result[i]-র ৩য় মান + ',' + result[i]-র ৪র্থ মান + ')'

উদাহরণ

নিচের ইমপ্লিমেন্টেশনটি দেখুন আরও ভালো বুঝতে:

#include <bits/stdc++.h> using namespace std; void solve(int h, int w, vector<vector<int>>grid){    vector<tuple<int,int,int,int>> result;    for(int i = 0; i < h; i++){       int tp = 0;       for(int j = 0; j < w; j++){          if(tp > 0){             result.push_back(make_tuple(i, j-1, i, j));             grid[i][j] += tp;          }          if(grid[i][j]%2 == 1 && j < w-1){             grid[i][j] -= 1;             tp = 1;          }          else             tp = 0;       }    }    int tp = 0;    for(int i = 0; i < h; i++){       if(tp > 0){          result.push_back(make_tuple(i-1, w-1, i, w-1));          grid[i][w-1] += tp;       }       if(grid[i][w-1]%2 == 1){          grid[i][w-1] -= 1;          tp = 1;       }       else          tp = 0;    }    cout << (int)result.size() << endl;    for(int i = 0; i < (int)result.size(); i++){       cout << "(" << get<0>(result[i]) << ", " << get<1>(result[i])       << ")" << " - (" << get<2>(result[i]) << ", " << get<3>(result[i]) << ")"; cout << '\n'; } } int main() { int h = 3, w = 3 ; vector<vector<int>> grid = {{2, 3, 4}, {2, 0, 1}, {1, 2, 3}}; solve(h, w, grid); return 0; }

ইনপুট

3, 3, {{2, 3, 4}, {2, 0, 1}, {1, 2, 3}}

আউটপুট

4 (0, 1) - (0, 2) (2, 0) - (2, 1) (2, 1) - (2, 2) (0, 2) - (1, 2)

  1. C++ প্রোগ্রাম: গ্রিডে আলোকিত কক্ষের সংখ্যা গণনা

  2. C++ প্রোগ্রাম: গ্রাফে ব্রিজ এজের সংখ্যা নির্ণয়

  3. C++ প্রোগ্রাম: গ্রিডে আকারীকৃত পলিগনের বাহুর সংখ্যা গণনা

  4. C++ প্রোগ্রাম: গ্রিডে একক পথ তৈরির জন্য ব্লক করতে হলে কক্ষের সংখ্যা