इस समस्या में, हमें एक m*n शतरंज की बिसात दी जाती है जिसमें 1 से भरे हुए स्थान होते हैं, यानी यदि बोर्ड [i] [j] =1, वहाँ कुछ टुकड़ा है और हमें दिया गया है प्रारंभिक स्थिति। हमारा काम बोर्ड में एक नाइट के लिए संभावित चालों की कुल संख्या का पता लगाना है, अगर सभी टुकड़े एक ही रंग के हैं यानी कोई हमला नहीं किया जाएगा।
नाइट इज चेस एक ऐसा टुकड़ा है जो किसी विशेष प्रकार की चाल के साथ सभी दिशाओं में आगे बढ़ सकता है। शतरंज में नाइट की चालें हैं -
-
दो क्षैतिज चालें और एक लंबवत चाल।
-
दो लंबवत चाल और एक क्षैतिज चाल।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट -
board[][] = { { 0, 1, 0, 0 }, { 0, 0, 1, 1 }, { 0, 1, 1, 0 }, { 0, 0, 0, 1 } }; Position : (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<<"Total number of moves possible for Knight from position ("<<position[0]<<" , "<<position[1]<<") are : "; cout<<countPossibleMoves(mat, position[0], position[1]); return 0; }
आउटपुट
Total number of moves possible for Knight from position (1 , 1) are : 4