Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ प्रोग्राम एक ग्रिड में सम-संख्या वाली कोशिकाओं की संख्या को अधिकतम करने के लिए संचालन की संख्या का पता लगाने के लिए

मान लीजिए, हमें h * w आयामों का एक ग्रिड दिया गया है। ग्रिड में प्रत्येक सेल को एक विशिष्ट मान दिया गया है। हमें सम मान वाले कक्षों को अधिकतम करना होगा। ऐसा करने के लिए, हम एक सेल का चयन कर सकते हैं जिसे पहले नहीं चुना गया है, और फिर वर्तमान सेल के मान को 1 से घटाएं और किसी अन्य सेल के मान को 1 से बढ़ा दें जो वर्तमान सेल से सटे लंबवत या क्षैतिज रूप से स्थित है। हम संचालन की संख्या और वृद्धि और कमी के संचालन के सेल नंबरों का प्रिंट आउट लेते हैं। आउटपुट नीचे दिए गए प्रारूप में होगा -

  • संचालन की संख्या

  • पहला (सेल की स्थिति में कमी) - (सेल की स्थिति में वृद्धि)

    ....

  • nth (सेल की स्थिति में कमी) - (सेल की स्थिति में वृद्धि)

इसलिए, यदि इनपुट h =3, w =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)

कदम

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

Define a new array result that contains a tuple
for initialize i := 0, when i < h, update (increase i by 1), do:
   tp := 0
   for initialize j := 0, when j < w, update (increase j by 1), do:
      if tp > 0, then:
         insert tuple(i, j - 1, i, j) at the end of result
         grid[i, j] := grid[i, j] + tp
      if grid[i, j] mod 2 is same as 1 and j < w-1, then:
         grid[i, j] := grid[i, j] - 1
         tp := 1
      Otherwise
         tp := 0
tp := 0
for initialize i := 0, when i < h, update (increase i by 1), do:
   if tp > 0, then:
  insert tuple(i - 1, w - 1, i, w - 1) at the end of result
grid[i, w - 1] := grid[i, w - 1] + tp
if grid[i, w - 1] mod 2 is same as 1, then:
grid[i, w - 1] := grid[i, w - 1] - 1
tp := 1
Otherwise
tp := 0
print(size of result)
for initialize i := 0, when i < size of result, update (increase i by 1), do:
print('(' + first value of result[i] + ',' + second value of result[i] + '- (' + third value of result[i] + ',' + fourth value of 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++ प्रोग्राम एक ग्रिड में प्रबुद्ध कोशिकाओं की संख्या का पता लगाने के लिए

    मान लीजिए, हमें h * w आयामों का एक ग्रिड दिया गया है। ग्रिड में कोशिकाओं में या तो बल्ब या बाधाएं हो सकती हैं। एक लाइट बल्ब सेल स्वयं को और उसके दाएं, बाएं, ऊपर और नीचे की कोशिकाओं को रोशन करता है और प्रकाश कोशिकाओं के माध्यम से चमक सकता है जब तक कि कोई बाधा सेल प्रकाश को अवरुद्ध न करे। एक बाधा सेल

  1. C++ प्रोग्राम दिए गए ग्राफ़ में ब्रिज किनारों की संख्या का पता लगाने के लिए

    मान लीजिए, हमें एक अभारित, अप्रत्यक्ष ग्राफ दिया गया है जिसमें n कोने और m किनारे हैं। ग्राफ़ में ब्रिज का किनारा वह किनारा होता है जिसके हटाने से ग्राफ़ डिस्कनेक्ट हो जाता है। हमें दिए गए आलेख में ऐसे आलेखों की संख्या ज्ञात करनी है। ग्राफ़ में समानांतर किनारे या सेल्फ़-लूप नहीं होते हैं। इसलिए, यद

  1. पथ बनाने के लिए ग्रिड में ब्लॉक करने के लिए कोशिकाओं की संख्या का पता लगाने के लिए सी ++ प्रोग्राम

    मान लीजिए, h * w आयामों का एक ग्रिड है। सेल स्थिति (0, 0) में एक रोबोट है और उसे स्थिति (h-1, w-1) पर जाना है। एक ग्रिड में दो प्रकार के सेल होते हैं, ब्लॉक और अनब्लॉक। रोबोट अनब्लॉक की गई कोशिकाओं से गुजर सकता है लेकिन अवरुद्ध कोशिकाओं से नहीं गुजर सकता। रोबोट चार दिशाओं में जा सकता है; यह बाएँ, दा