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
王は有効な動きをすることができます。
メソッド
ここでは、騎士の動きはチェスの駒の中で珍しいものです。その動きは、水平方向に2マス、垂直方向に1マス、または縦に2マス、横に1マス離れたマスに向かっています。したがって、完全な動きは、可能なすべての形状で文字「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!
-
サイズnの指定された配列がnレベルのBSTを表すことができるかどうかをC++で確認してください
配列Aがあり、配列がnレベルのBSTを表すことができるかどうかを確認する必要があります。レベルがであるため、次のようにツリーを構築できます。数値をkとすると、kより大きい値は右側に移動し、kより小さい値は左側に移動します。 {50、20、9、25、10}と{50、30、20、25、10}の2つのリストがあるとします。 最初のものは無効ですが、2番目のものは有効です。 これを確認するには、BSTを作成して高さを確認するか、配列ベースのアプローチを使用します。アレイベースのアプローチは以下のようなものです- 2つの変数max=infinityを使用して、左側のサブツリーの最大制限をマー
-
Pythonで変更されたチェス盤にN泊しているときに、王が有効な動きを移動できるかどうかを確認します
チェスと同じルールの無限チェス盤が1つあり、無限チェス盤にN騎士の座標と王の座標がある場合、王がチェックメイトであるかどうかを確認する必要があります。無限ボードの座標は、(-10 ^ 9 <=x、y <=10 ^ 9)のような大きな値で囲まれています。 したがって、入力が騎士の位置=[[2,1]、[1,3]、[3,6]、[5,5]、[6,1]、[7,3]]および王の位置のような場合:[4,3]、 キングには動きがないため、出力はTrueになり、チェックメイトになります。 これを解決するには、次の手順に従います- my_dict:=新しい地図 0からnの範囲のiについては、