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

C++ में शतरंज की बिसात में बदलना

मान लीजिए कि हमारे पास एक N x N बोर्ड है जिसमें केवल 0s और 1s हैं। अब प्रत्येक चाल में, हम किसी भी 2 पंक्तियों या किसी भी 2 स्तंभों को स्वैप कर सकते हैं। हमें बोर्ड को "शतरंज की बिसात" में बदलने के लिए चालों की न्यूनतम संख्या ज्ञात करनी होगी। यदि समाधान मौजूद नहीं है, तो -1 लौटाएं।

तो अगर इनपुट की तरह है -

<टीडी>
<टीडी>
<टीडी>
<टीडी>
<टीडी>
<टीडी>










फिर आउटपुट 2 होगा, पहले दो कॉलम के रूप में पहली चाल में, फिर बोर्ड जैसा होगा -

<टीडी>
<टीडी>
<टीडी>
<टीडी>
<टीडी>
<टीडी>










फिर दूसरी और तीसरी पंक्तियों को स्वैप करें -

<टीडी>
<टीडी>
<टीडी>
<टीडी>
<टीडी>
<टीडी>










यह बिसात है

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

  • n :=b का आकार
  • इनिशियलाइज़ i :=0 के लिए, जब i करें
  • इनिशियलाइज़ j :=0 के लिए, जब j करें
  • यदि b[0, 0] XOR b[0, j] XOR b[i, 0] XOR b[i, j] शून्य नहीं है, तो −
    • वापसी -1
  • rowSum :=0, colSum :=0, rowSwap :=0, colSwap :=0
  • इनिशियलाइज़ i :=0 के लिए, जब i करें
  • rowSum:=rowSum + b[i, 0], colSum:=colSum + b[0, i]
  • rowSwap :=true जब rowSwap + b[i, 0] i mod 2 के समान हो,
  • colSwap :=true जब colSwap + b[0, i] i mod 2 के समान हो
  • यदि पंक्ति योग n / 2 के बराबर नहीं है और पंक्ति योग (n + 1) / 2 के बराबर नहीं है, तो −
    • वापसी -1
  • यदि colSum n / 2 के बराबर नहीं है और colSum (n + 1) / 2 के बराबर नहीं है, तो −
    • वापसी -1
  • यदि n mod 2 1 के समान है, तो −
    • यदि colSwap mod 2 शून्य नहीं है, तो −
      • colSwap :=n - colSwap
    • यदि पंक्ति स्वैप मोड 2 शून्य नहीं है, तो −
      • पंक्ति बदलें:=n - पंक्ति बदलें
  • अन्यथा
    • colSwap :=न्यूनतम colSwap और n - colSwap
    • पंक्ति स्वैप :=न्यूनतम पंक्ति स्वैप और n-पंक्ति स्वैप
  • वापसी (rowSwap + colSwap) / 2
  • आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

    उदाहरण

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       int movesToChessboard(vector<vector<int>>& b) {
          int n = b.size();
          for(int i = 0; i < n; i++){
             for(int j = 0; j < n; j++){
                if(b[0][0] ^ b[0][j] ^ b[i][0] ^ b[i][j]) return -1;
             }
          }
          int rowSum = 0;
          int colSum = 0;
          int rowSwap = 0;
          int colSwap = 0;
          for(int i = 0; i < n; i++){
             rowSum += b[i][0];
             colSum += b[0][i];
             rowSwap += b[i][0] == i % 2;
             colSwap += b[0][i] == i % 2;
          }
          if(rowSum != n/2 && rowSum != (n + 1)/2)return -1;
          if(colSum != n/2 && colSum != (n + 1)/2)return -1;
          if(n % 2 == 1){
             if(colSwap % 2) colSwap = n - colSwap;
             if(rowSwap % 2) rowSwap = n - rowSwap;
          }else{
             colSwap = min(colSwap, n - colSwap);
             rowSwap = min(rowSwap, n - rowSwap);
          }
          return (rowSwap + colSwap)/2;
       }
    };
    main(){
       Solution ob;
       vector<vector<int>> v = {{0,1,1,0},{0,1,1,0},{1,0,0,1},{1,0,0,1}};
       cout << (ob.movesToChessboard(v));
    }

    इनपुट

    {{0,1,1,0},{0,1,1,0},{1,0,0,1},{1,0,0,1}};

    आउटपुट

    2

    1. अधिकतम बिशप जिन्हें C++ में N*N शतरंज की बिसात पर रखा जा सकता है

      हमें एक इनपुट एन दिया गया है जो शतरंज की बिसात के आकार को दर्शाता है। यहाँ कार्य N के किसी भी मान का पता लगाना है, NXN शतरंज की बिसात पर कितने बिशप रखे जा सकते हैं ताकि कोई भी दो बिशप एक दूसरे पर हमला न कर सकें। आइए उदाहरणों से समझते हैं। इनपुट -एन=2 आउटपुट - अधिकतम बिशप जिन्हें N*N शतरंज की बिस

    1. C++ . में शतरंज की बिसात में नाइट की संभाव्यता

      मान लीजिए कि हमारे पास एक NxN शतरंज की बिसात है, एक शूरवीर r-वें पंक्ति और c-वें स्तंभ से शुरू होता है और ठीक K चाल चलने का प्रयास करता है। यहां पंक्तियों और स्तंभों को 0 अनुक्रमित किया गया है, इसलिए शीर्ष-बाएं वर्ग (0, 0) है, और निचला-दायां वर्ग (N-1, N-1) है। एक शूरवीर एक सेल से 8 अलग-अलग कोशिकाओ

    1. Linux पर C++ का सबसे अच्छा IDE क्या है?

      केवल टेक्स्ट एडिटर्स पर बड़े प्रोजेक्ट्स को मैनेज करना मुश्किल है। यदि आप ऐसे मामलों में आईडीई का उपयोग करते हैं तो आप अधिक उत्पादक और कम निराश होने की संभावना रखते हैं। विभिन्न प्रकार के आईडीई हैं और आपको अपनी आवश्यकताओं के अनुरूप सही का चयन करना चाहिए। Linux पर C++ के लिए एक भी सर्वश्रेष्ठ IDE नही