কম্পিউটার

C++ এ একটি পরিবর্তিত চেসবোর্ডে N রাত থাকার সময় রাজা একটি বৈধ পদক্ষেপ নিতে পারেন কিনা তা পরীক্ষা করুন


ধারণা

দাবার মতো একই নিয়মের সাথে প্রদত্ত অসীম দাবাবোর্ড এবং প্রদত্ত এন নাইটদের অসীম দাবাবোর্ডে স্থানাঙ্ক (-10^9 <=x, y <=10^9) এবং রাজার স্থানাঙ্কের ক্ষেত্রে, কাজটি যাচাই করা হয় যদি রাজা চেকমেট কি না।

ইনপুট

a1[] = { { 2, 1 }, { 1, 3 }, { 3, 6 },{ 5, 5 }, { 6, 1 }, { 7, 3 }} king -> {4, 3}

আউটপুট

Yes

চেক মেট হওয়ায় রাজা কোনো পদক্ষেপ নিতে পারছেন না।

ইনপুট

a1 [] = {{1, 1}} king -> {3, 4}

আউটপুট

No

রাজা বৈধ পদক্ষেপ করতে সক্ষম হতে পারে।

পদ্ধতি

এখানে, দাবা খেলার মধ্যে নাইটের চালটা অস্বাভাবিক। এটির গতি একটি বর্গক্ষেত্রের দিকে যা অনুভূমিকভাবে দুই বর্গক্ষেত্র দূরে এবং একটি বর্গক্ষেত্র উল্লম্বভাবে, অথবা দুটি বর্গক্ষেত্র উল্লম্বভাবে এবং একটি বর্গক্ষেত্র অনুভূমিকভাবে। সুতরাং, সম্পূর্ণ পদক্ষেপটি সম্ভাব্য প্রতিটি আকারে "L" অক্ষরের মতো দেখায় (8 সম্ভাব্য চাল)। এর ফলস্বরূপ, সমস্ত সম্ভাব্য স্থানাঙ্ক চিহ্নিত করতে জোড়াগুলির একটি হ্যাশ মানচিত্র প্রয়োগ করুন যেখানে নাইটটি সরতে পারে। যদি দেখা যায় যে রাজা তার আশেপাশের 8টি স্থানাঙ্কের কোনোটিতে যেতে পারেন না, অর্থাৎ, যদি কোনো নাইটের পদক্ষেপে স্থানাঙ্কটি হ্যাশ করা হয়, তাহলে এটিকে "চেকমেট" হিসাবে ঘোষণা করা হয়৷

উদাহরণ

// C++ program for verifying if a king
// can move a valid move or not when
// N nights are there in a modified chessboard
#include <bits/stdc++.h>
using namespace std;
bool checkCheckMate1(pair<int, int>a1[], int n1, int kx1, int ky1){
   // Pair of hash to indicate or mark the coordinates
   map<pair<int, int>, int> mpp1;
   // iterate for Given N knights
   for (int i = 0; i < n1; i++) {
      int x = a1[i].first;
      int y = a1[i].second;
      // indicate or mark all the "L" shaped coordinates
      // that can be reached by a Knight
      // starting or initial position
      mpp1[{ x, y }] = 1;
      // 1-st move
      mpp1[{ x - 2, y + 1 }] = 1;
      // 2-nd move
      mpp1[{ x - 2, y - 1 }] = 1;
      // 3-rd move
      mpp1[{ x + 1, y + 2 }] = 1;
      // 4-th move
      mpp1[{ x + 1, y - 2 }] = 1;
      // 5-th move
      mpp1[{ x - 1, y + 2 }] = 1;
      // 6-th move
      mpp1[{ x + 2, y + 1 }] = 1;
      // 7-th move
      mpp1[{ x + 2, y - 1 }] = 1;
      // 8-th move
      mpp1[{ x - 1, y - 2 }] = 1;
   }
   // iterate for all possible 8 coordinates
   for (int i = -1; i < 2; i++) {
      for (int j = -1; j < 2; j++) {
         int nx = kx1 + i;
         int ny = ky1 + j;
         if (i != 0 && j != 0) {
            // verify or check a move can be made or not
            if (!mpp1[{ nx, ny }]) {
               return true;
            }
         }
      }
   }
   // any moves
   return false;
}
// Driver Code
int main(){
   pair<int, int&lgt; a1[] = { { 2, 1 }, { 1, 3 }, { 3, 6 }, { 5, 5 }, { 6, 1 }, { 7, 3 }};
   int n1 = sizeof(a1) / sizeof(a1[0]);
   int x = 4, y = 3;
   if (checkCheckMate1(a1, n1, x, y))
      cout << "Not Checkmate!";
   else
      cout << "Yes its checkmate!";
   return 0;
}

আউটপুট

Yes its checkmate!

  1. n আকারের প্রদত্ত অ্যারে চেক করুন n স্তরের BST প্রতিনিধিত্ব করতে পারে বা C++ এ নয়

  2. একটি সংখ্যা 23 দ্বারা বিভাজ্য বা C++ এ নয় তা পরীক্ষা করুন

  3. একটি নম্বর একটি কৃষ্ণমূর্তি নম্বর কিনা তা C++ এ পরীক্ষা করুন

  4. পাইথনে একটি পরিবর্তিত চেসবোর্ডে যখন N রাত থাকে তখন রাজা একটি বৈধ পদক্ষেপ নিতে পারে কিনা তা পরীক্ষা করে দেখুন