इस समस्या में, हमें एक m*n शतरंज बोर्ड दिया गया है जिसमें भरी हुई स्थितियों को 1 से चिह्नित किया गया है यानी यदि board[i][j] = 1, तो वहां कोई मोहरा है और हमें शुरुआती स्थिति दी गई है। हमारा कार्य बोर्ड में नाइट के लिए संभावित चालों की कुल संख्या ढूंढना है, यदि सभी मोहरे एक ही रंग के हैं यानी कोई हमला नहीं किया जाएगा।
शतरंज में नाइट एक मोहरा है जो सभी दिशाओं में कुछ विशेष प्रकार की चाल से चल सकता है। शतरंज में नाइट की चालें हैं:
दो क्षैतिज चालें और एक लंबवत चाल।
दो लंबवत चालें और एक क्षैतिज चाल।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट -
board[][] = {
{0, 1, 0, 0},
{0, 0, 1, 1},
{0, 1, 1, 0},
{0, 0, 0, 1}
};
स्थिति: (1,1)
आउटपुट - 4
इस समस्या को हल करने के लिए, हमें शतरंज बोर्ड में नाइट की सभी संभावित चालों में से वैध चालें ढूंढनी होंगी। एक चाल वैध है यदि वह शतरंज बोर्ड में एक स्थिति पर जाती है और किसी अन्य मोहरे द्वारा पूर्व-कब्जा नहीं की गई है।
इसके लिए, हम दी गई स्थिति से नाइट की सभी संभावित चालों को स्टोर करेंगे। और फिर प्रत्येक चाल की वैधता की जांच करेंगे और प्रत्येक वैध चाल के लिए काउंट बढ़ाएंगे।
उदाहरण
हमारे समाधान का कार्यान्वयन दर्शाने वाला प्रोग्राम:
#include <bits/stdc++.h>
#define N 8
#define M 8
using namespace std;
int countPossibleMoves(int mat[N][M], int p, int q) {
int Xmoves[8] = {2, 1, -1, -2, -2, -1, 1, 2};
int Ymoves[8] = {1, 2, 2, 1, -1, -2, -2, -1};
int count = 0;
for (int i = 0; i < 8; i++) {
int x = p + Xmoves[i];
int y = q + Ymoves[i];
if (x >= 0 && y >= 0 && x < N && y < M && mat[x][y] == 0)
count++;
}
return count;
}
int main() {
int mat[N][M] = {{0, 1, 0, 0},
{0, 0, 1, 1},
{0, 1, 1, 0},
{0, 0, 0, 1}};
int position[2] = {1, 1};
cout << "स्थिति (" << position[0] << " , " << position[1] << ") से नाइट के लिए संभावित चालों की कुल संख्या है: ";
cout << countPossibleMoves(mat, position[0], position[1]);
return 0;
}
आउटपुट
स्थिति (1 , 1) से नाइट के लिए संभावित चालों की कुल संख्या है: 4