কনসেপ্ট
অনন্ত শतरঞ্জ বোর্ডে Nটি ঘোড়ার কোঅর্ডিনেট এবং রাজার কোঅর্ডিনেট দেওয়া আছে। যাচাই করুন রাজা চেকমেটে আছে কিনা।
ইনপুট
a1[] = { { 2, 1 }, { 1, 3 }, { 3, 6 },{ 5, 5 }, { 6, 1 }, { 7, 3 }} king -> {4, 3} আউটপুট
Yes
রাজা যেকোনো মুভ দিতে পারছে না, চেকমেট।
ইনপুট
a1[] = {{1, 1}} king -> {3, 4} আউটপুট
No
রাজা বৈধ মুভ দিতে পারে।
পদ্ধতি
ঘোড়ার মুভ অনন্য: দুই ঘর আড়াঘরে এবং এক ঘর লম্বে, বা দুই ঘর লম্বে এবং এক ঘর আড়াঘরে (৮টি সম্ভাব্য মুভ)। সব ঘোড়ার সম্ভাব্য মুভের কোঅর্ডিনেট একটি হ্যাশ ম্যাপে মার্ক করুন। তারপর রাজার ৮টি সংলগ্ন কোঅর্ডিনেট চেক করুন। যদি সবগুলো হ্যাশে থাকে, তবে চেকমেট।
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
bool checkCheckMate1(pair<int, int>a1[], int n1, int kx1, int ky1){
map<pair<int, int>, int> mpp1;
for (int i = 0; i < n1; i++) {
int x = a1[i].first;
int y = a1[i].second;
mpp1[{ x, y }] = 1;
mpp1[{ x - 2, y + 1 }] = 1;
mpp1[{ x - 2, y - 1 }] = 1;
mpp1[{ x + 1, y + 2 }] = 1;
mpp1[{ x + 1, y - 2 }] = 1;
mpp1[{ x - 1, y + 2 }] = 1;
mpp1[{ x + 2, y + 1 }] = 1;
mpp1[{ x + 2, y - 1 }] = 1;
mpp1[{ x - 1, y - 2 }] = 1;
}
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) {
if (!mpp1[{ nx, ny }]) {
return true;
}
}
}
}
return false;
}
int main(){
pair<int, int> 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!