Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में जांचें कि राजा एक वैध चाल चल सकता है या नहीं जब N घोड़े संशोधित शतरंज बोर्ड पर हों

अवधारणा

समान नियमों वाले अनंत शतरंज बोर्ड पर दिए गए 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++ कार्यान्वयन

// C++ program for verifying if a king can move a valid move or not when N knights 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){
    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!
  1. C++ में जांचें कि आकार n की दी गई सरणी n लेवल के BST को दर्शा सकती है या नहीं C++ में जांचें कि आकार n की दी गई सरणी n लेवल के BST को दर्शा सकती है या नहीं

    हमारे पास एक सरणी A है, हमें जांचना है कि सरणी n लेवल के BST को दर्शा सकती है या नहीं। चूंकि लेवल n है, हम निम्न तरीके से ट्री बना सकते हैं। मान लीजिए एक संख्या k है, k से बड़ा मान दाईं ओर जाता है, और k से छोटा मान बाईं ओर जाता है। मान लीजिए दो सूचियां हैं: {50, 20, 9, 25, 10}, और {50, 30, 20, 25, 1

  1. - C++ में जांचें कि संख्या कृष्णमूर्ति संख्या है या नहीं

    यहां हम देखेंगे कि संख्या कृष्णमूर्ति संख्या है या नहीं, इसकी जांच कैसे करें। एक संख्या कृष्णमूर्ति संख्या है, यदि उसके प्रत्येक अंक के फैक्टोरियल का योग संख्या के समान है। उदाहरण के लिए, यदि संख्या 145 है, तो योग = 1! + 4! + 5! = 1 + 24 + 120 = 145। तो यह एक कृष्णमूर्ति संख्या है।तर्क सरल है, हमें

  1. पायथन में शतरंज बोर्ड पर राजा की चाल वैधता जांच (नाइट्स के साथ) पायथन में शतरंज बोर्ड पर राजा की चाल वैधता जांच (नाइट्स के साथ)

    समस्या विवरण अनंत शतरंज बोर्ड पर N नाइट्स के निर्देशांक और राजा का निर्देशांक दिया गया है। जांचें कि क्या राजा चेकमेट है (कोई वैध चाल नहीं)। बोर्ड निर्देशांक: -10⁹ ≤ x,y ≤ 10⁹। उदाहरण नाइट्स: [[2,1], [1,3], [3,6], [5,5], [6,1], [7,3]] राजा: [4, 3] आउटपुट: True (चेकमेट) एल्गोरिदम डिक्शनरी my_dict