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

नाइट के दौरे की समस्या


शतरंज में, हम जानते हैं कि शूरवीर एक विशेष तरीके से कूद सकता है। यह दो वर्गों को क्षैतिज रूप से और एक वर्ग को लंबवत या दो वर्गों को लंबवत और एक वर्ग क्षैतिज रूप से प्रत्येक दिशा में स्थानांतरित कर सकता है, इसलिए पूरा आंदोलन अंग्रेजी अक्षर 'एल' जैसा दिखता है।

नाइट के दौरे की समस्या

इस समस्या में, एक खाली शतरंज बोर्ड है, और बोर्ड में किसी भी स्थान से एक नाइट शुरू होता है, हमारा काम यह जांचना है कि क्या नाइट बोर्ड के सभी वर्गों का दौरा कर सकता है या नहीं। जब यह सभी चौकों पर जा सकता है, तो उस स्थान तक पहुंचने के लिए शुरुआती बिंदु से आवश्यक छलांगें लगाएं।

इस समस्या के कई समाधान हो सकते हैं, लेकिन हम एक संभावित समाधान खोजने की कोशिश करेंगे।

इनपुट और आउटपुट

Input:  
The size of a chess board. Generally, it is 8. as (8 x 8 is the size of a normal chess board.)
Output:
The knight’s moves. Each cell holds a number, that indicates where to start and the knight will reach a cell at which move.

  0  59  38  33  30  17   8  63
 37  34  31  60   9  62  29  16
 58   1  36  39  32  27  18   7
 35  48  41  26  61  10  15  28
 42  57   2  49  40  23   6  19
 47  50  45  54  25  20  11  14
 56  43  52   3  22  13  24   5
 51  46  55  44  53   4  21  12

एल्गोरिदम

isValid(x, y, Solution)

>इनपुट - एक्स और वाई और समाधान मैट्रिक्स रखें।

>आउटपुट - जांचें कि क्या (x, y) जगह पर है और अभी तक असाइन नहीं किया गया है।

Begin
   if 0 ≤ x ≤ Board Size and 0 ≤ y ≤ Board Size, and (x, y) is empty, then
      return true
End

knightTour(x, y, move, sol, xMove, yMove)

इनपुट − (एक्स, वाई) स्थान, चालों की संख्या, समाधान मैट्रिक्स, और संभावित एक्स और वाई आंदोलन सूचियां।

>आउटपुट - अद्यतन समाधान मैट्रिक्स यदि मौजूद है।

Begin
   if move = Board Size * Board Size, then //when all squares are visited
      return true
   for k := 0 to number of possible xMovement or yMovement, do
      xNext := x + xMove[k]
      yNext := y + yMove[k]
      if isValid(xNext, yNext, sol) is true, then
         sol[xNext, yMext] := move
         if knightTour(xNext, yNext, move+1, sol, xMove, yMove), then
            return true
         else
            remove move from the sol[xNext, yNext] to backtrack
   done
   return false
End

उदाहरण

#include <iostream>
#include <iomanip>
#define N 8

using namespace std;
int sol[N][N];

bool isValid(int x, int y, int sol[N][N]) {     //check place is in range and not assigned yet
   return ( x >= 0 && x < N && y >= 0 && y < N && sol[x][y] == -1);
}

void displaySolution() {
   for (int x = 0; x < N; x++) {
      for (int y = 0; y < N; y++)
         cout << setw(3) << sol[x][y] << " ";
      cout << endl;
   }
}

int knightTour(int x, int y, int move, int sol[N][N], int xMove[N], int yMove[N]) {
   int xNext, yNext;
   if (move == N*N)     //when the total board is covered
      return true;

   for (int k = 0; k < 8; k++) {
      xNext = x + xMove[k];
      yNext = y + yMove[k];
      if (isValid(xNext, yNext, sol)) {     //check room is preoccupied or not
         sol[xNext][yNext] = move;
         if (knightTour(xNext, yNext, move+1, sol, xMove, yMove) == true)
            return true;
         else
            sol[xNext][yNext] = -1;// backtracking
      }
   }
   return false;
}

bool findKnightTourSol() {
   for (int x = 0; x < N; x++)     //initially set all values to -1 of solution matrix
      for (int y = 0; y < N; y++)
         sol[x][y] = -1;
   //all possible moves for knight
   int xMove[8] = {  2, 1, -1, -2, -2, -1,  1,  2 };
   int yMove[8] = {  1, 2,  2,  1, -1, -2, -2, -1 };
   sol[0][0]  = 0;     //starting from room (0, 0)

   if (knightTour(0, 0, 1, sol, xMove, yMove) == false) {
      cout << "Solution does not exist";
      return false;
   } else
      displaySolution();
   return true;
}

int main() {
   findKnightTourSol();
}

आउटपुट

 0  59  38  33  30  17   8  63
37  34  31  60   9  62  29  16
58   1  36  39  32  27  18   7
35  48  41  26  61  10  15  28
42  57   2  49  40  23   6  19
47  50  45  54  25  20  11  14
56  43  52   3  22  13  24   5
51  46  55  44  53   4  21  12

  1. Windows त्रुटि रिपोर्टिंग सेवा में अपलोड करने में समस्या ठीक करें

    हम सभी जानते हैं कि Windows Action Center . का इस्तेमाल करके , हम समाधानों की जांच करें . का उपयोग करके अपने सिस्टम के साथ समस्याओं का समाधान कर सकते हैं एक मुद्दे के खिलाफ उल्लिखित बटन। इस प्रकार, समय-समय पर, हमें विभिन्न समस्याओं से निपटना पड़ता है और तदनुसार, हमें सुधारों की जांच करनी होती है। ले

  1. उबंटू में "नो इंस्टॉलेशन कैंडिडेट" समस्या को कैसे ठीक करें?

    आपने कुछ स्थापित करने का प्रयास किया है, लेकिन उबंटू इसे ऑन-बोर्ड नहीं ला सकता है। उपयुक्त कोई स्थापना उम्मीदवार नहीं के बारे में कुछ उल्लेख करता है। इसका क्या अर्थ है, समस्या का स्रोत क्या है, और क्या इसे ठीक किया जा सकता है? यहां कुछ तरीके दिए गए हैं जिनसे आप इसे ठीक कर सकते हैं। इसका क्या अर्थ है

  1. विंडोज़ पर हमाची सुरंग समस्या को कैसे ठीक करें?

    हमाची एक डेस्कटॉप टूल है जिसका उपयोग कई दूर के कंप्यूटरों के बीच वर्चुअल प्राइवेट नेटवर्क बनाने और प्रबंधित करने के लिए किया जा सकता है। अधिकांश लोग इसका उपयोग स्थानीय क्षेत्र नेटवर्क का अनुकरण करने के लिए करते हैं जिसका उपयोग कुछ गेम खेलने के लिए किया जा सकता है। हालांकि, हमाची सुरंग समस्या उपयोगकर