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

नाइट टूर समस्या


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

नाइट टूर समस्या

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

इस समस्या के कई समाधान हो सकते हैं, लेकिन हम एक संभावित समाधान ढूंढने का प्रयास करेंगे।

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

इनपुट: शतरंज बोर्ड का आकार। आमतौर पर, यह 8 है। क्योंकि (8 x 8 सामान्य शतरंज बोर्ड का आकार है।) आउटपुट: नाइट की चालें। प्रत्येक सेल एक संख्या रखता है, जो इंगित करता है कि कहां से शुरू करना है और नाइट किस चाल में उस सेल तक पहुंचेगा। 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 और समाधान मैट्रिक्स

आउटपुट - जांचता है कि (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)

इनपुट - (x, y) स्थान, चालों की संख्या, समाधान मैट्रिक्स, और संभावित x और y मूवमेंट सूचियां

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

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  #include  #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 Error Reporting Service में अपलोड समस्या ठीक करें Windows Error Reporting Service में अपलोड समस्या ठीक करें

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

  1. Ubuntu में  कोई इंस्टॉलेशन उम्मीदवार नहीं  समस्या को कैसे ठीक करें Ubuntu में "कोई इंस्टॉलेशन उम्मीदवार नहीं" समस्या को कैसे ठीक करें

    आपने कुछ इंस्टॉल करने की कोशिश की, लेकिन Ubuntu इसे ऑन-बोर्ड नहीं ला सकता। Apt कोई इंस्टॉलेशन उम्मीदवार नहीं के बारे में कुछ बताता है। इसका क्या मतलब है, समस्या का स्रोत क्या है, और क्या यह ठीक करने योग्य है? यहां इसे ठीक करने के कुछ तरीके हैं। इसका क्या मतलब है? यदि आप किसी ऐसे पैकेज को इंस्टॉल कर

  1. विंडोज़ पर Hamachi Tunnel समस्या कैसे ठीक करें? विंडोज़ पर Hamachi Tunnel समस्या कैसे ठीक करें?

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