Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การเคลื่อนไหวที่เป็นไปได้ของอัศวินใน C++


ในปัญหานี้ เราได้รับกระดานหมากรุก m*n ที่มีตำแหน่งเต็มที่มีเครื่องหมาย 1 เช่น ถ้า board[i][j] =1 มีบางชิ้นอยู่ตรงนั้นและเราจะได้รับ ตำแหน่งเริ่มต้น งานของเราคือการหาจำนวนการเคลื่อนไหวที่เป็นไปได้สำหรับอัศวินในกระดาน หากมีชิ้นส่วนที่มีสีเดียวกันทั้งหมด กล่าวคือ จะไม่มีการโจมตีเกิดขึ้น

Knight is chess เป็นชิ้นส่วนที่สามารถเคลื่อนที่ได้ในทุกทิศทางด้วยการเคลื่อนไหวแบบพิเศษ การเคลื่อนไหวของอัศวินในหมากรุกคือ −

  • การเคลื่อนที่ในแนวนอนสองครั้งและการเคลื่อนที่ในแนวตั้ง

  • การเคลื่อนที่ในแนวตั้งสองครั้งและการเคลื่อนที่ในแนวนอน

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

ป้อนข้อมูล

board[][] = {
   { 0, 1, 0, 0 },
   { 0, 0, 1, 1 },
   { 0, 1, 1, 0 },
   { 0, 0, 0, 1 }
};
Position : (1,1)

ผลผลิต − 4

เพื่อแก้ปัญหานี้ เราต้องค้นหาว่าอะไรคือท่าที่ถูกต้องจากท่าที่เป็นไปได้ทั้งหมดของอัศวินในกระดานหมากรุก การย้ายจะมีผลถ้าย้ายออกจากตำแหน่งที่อยู่ในกระดานหมากรุกและไม่ถูกครอบครองโดยส่วนอื่นใด

สำหรับสิ่งนี้ เราจะเก็บทุกการเคลื่อนไหวที่เป็นไปได้ของอัศวินจากตำแหน่งที่กำหนด จากนั้นตรวจสอบความถูกต้องของการเคลื่อนไหวแต่ละครั้งและเพิ่มจำนวนการเคลื่อนไหวที่ถูกต้องแต่ละครั้ง

ตัวอย่าง

โปรแกรมแสดงการใช้งานโซลูชันของเรา -

#include <bits/stdc++.h>
#define N 8
#define M 8
using namespace std;
int countPossibleMoves(int mat[N][M], int p, int q){
   int Xmoves[8] = { 2, 1, -1, -2, -2, -1, 1, 2 };
   int Ymoves[8] = { 1, 2, 2, 1, -1, -2, -2, -1 };
   int count = 0;
   for (int i = 0; i < 8; i++) {
      int x = p + Xmoves[i];
      int y = q + Ymoves[i];
      if (x>=0 && y>=0 && x<N && y<M && mat[x][y]==0)
         count++;
   }
   return count;
}
int main(){
   int mat[N][M] = { { 0, 1, 0, 0 },
      { 0, 0, 1, 1 },
      { 0, 1, 1, 0 },
      { 0, 0, 0, 1 }};
   int position[2] = {1,1};
   cout<<"Total number of moves possible for Knight from position ("<<position[0]<<" , "<<position[1]<<") are : ";
   cout<<countPossibleMoves(mat, position[0], position[1]);
   return 0;
}

ผลลัพธ์

Total number of moves possible for Knight from position (1 , 1) are : 4