C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でModifiedKnightが到達できるすべての可能な位置をカウントします


このチュートリアルでは、ModifiedKnightが到達できる可能性のあるポジションの数を見つけるためのプログラムについて説明します。

このために、8*8のチェス盤が提供されます。私たちのタスクは、ModifiedKnightが指定されたステップ数でキャプチャできるポジションの数を見つけることです。

#include <bits/stdc++.h>
using namespace std;
//finding the positions
void findSteps(int current_row, int current_column,int curr, int board_size, int steps,int* visited){
   //bound checking
   if (current_row >= board_size || current_row < 0
      || current_column >= board_size || current_column < 0
      || curr > steps) {
      return;
   }
   if (curr == steps) {
      *((visited + (current_row)*board_size) + current_column) = 1;
      return;
   }
   findSteps(current_row - 2, current_column - 1,curr + 1, board_size, steps, visited);
   findSteps(current_row - 2, current_column + 1,curr + 1, board_size, steps, visited);
   findSteps(current_row - 1, current_column - 2,curr + 1, board_size, steps, visited);
   findSteps(current_row - 1, current_column - 1,curr + 1, board_size, steps, visited);
   findSteps(current_row - 1, current_column + 1,curr + 1, board_size, steps, visited);
   findSteps(current_row - 1, current_column + 2,curr + 1, board_size, steps, visited);
   findSteps(current_row + 1, current_column - 2,curr + 1, board_size, steps, visited);
   findSteps(current_row + 1, current_column - 1,curr + 1, board_size, steps, visited);
   findSteps(current_row + 1, current_column + 1,curr + 1, board_size, steps, visited);
   findSteps(current_row + 1, current_column + 2,curr + 1, board_size, steps, visited);
   findSteps(current_row + 2, current_column - 1,curr + 1, board_size, steps, visited);
   findSteps(current_row + 2, current_column + 1,curr + 1, board_size, steps, visited);
   return;
}
int countSteps(int current_row, int current_column,int board_size, int steps){
   int visited[board_size][board_size];
   for (int i = 0; i < board_size; i++) {
      for (int j = 0; j < board_size; j++) {
         visited[i][j] = 0;
      }
   }
   int answer = 0;
   findSteps(current_row, current_column, 0,board_size, steps, (int*)visited);
   for (int i = 0; i < board_size; i++) {
      for (int j = 0; j < board_size; j++) {
         if (visited[i][j] == 1) {
            answer++;
         }
      }
   }
   return answer;
}
int main(){
   int board_size = 8, steps = 1;
   int current_row = 4, current_column = 4;
   cout << countSteps(current_row, current_column,board_size, steps);
   return 0;
}

出力

12

  1. C++で1回の移動でビショップがアクセスできる正方形の総数を数えます

    8 X 8グリッドで表されるチェス盤では、行と列の位置の形式でビショップの位置が与えられます。目標は、ビショップが1回の移動で訪問できる正方形の総数を見つけることです。ビショップはすべての方向に移動できることがわかっています(対角線上で左上/下および右上/下)。 例 入力 row = 5, column = 4 出力 Count of total number of squares that can be visited by Bishop in one move are: 13 説明 As shown in above figure the squares that Bishop

  2. C ++での混乱のカウント(元の位置に要素が表示されないような順列)

    混乱とは、元の位置に数字が表示されないようにN個の数字を並べ替えることです。たとえば、{1,2,3}の考えられる混乱の1つは、{1,1,3}です。この中の要素は元の位置にありません。ここでの目標は、N個の数字の混乱の可能性を数えることです。 これは、再帰的なソリューションを使用して行います。以下の番号について。要素の- N =0、混乱なし、1を返します N =1、1つの数値のみ、0を返します N =2、可能な位置の交換は1つだけ、{1,2}→{1,1}、1を返す N =3、2つの可能な順列、例:{1,2,3}→{1,3,1}、{3,1,2}カウント2 N =4、9つの可能な順列