अवधारणा
दिए गए अनंत बिसात के संबंध में शतरंज के समान नियमों के साथ और दिए गए 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
राजा वैध चाल चलने में सक्षम हो सकता है।
विधि
यहाँ, शतरंज के टुकड़ों के बीच नाइट की चाल असामान्य है। इसकी गति एक वर्ग की ओर होती है जो क्षैतिज रूप से दो वर्ग दूर और एक वर्ग लंबवत, या दो वर्ग लंबवत और एक वर्ग क्षैतिज रूप से होता है। तो, पूरी चाल हर संभव आकार (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!