मान लीजिए कि हमारे पास एक 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
- इनिशियलाइज़ j :=0 के लिए, जब j
- वापसी -1
- वापसी -1
- यदि colSwap mod 2 शून्य नहीं है, तो −
- colSwap :=n - colSwap
- यदि पंक्ति स्वैप मोड 2 शून्य नहीं है, तो −
- पंक्ति बदलें:=n - पंक्ति बदलें
- colSwap :=न्यूनतम colSwap और n - colSwap
- पंक्ति स्वैप :=न्यूनतम पंक्ति स्वैप और n-पंक्ति स्वैप
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#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