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

सुडोकू सॉल्विंग एल्गोरिदम


इस खंड में, हम प्रसिद्ध नंबर मेज़ समस्या जिसे सुडोकू कहा जाता है, को हल करने का प्रयास करेंगे। सुडोकू एक 9 x 9 नंबर ग्रिड है, और पूरा ग्रिड 3 x 3 बॉक्स में भी विभाजित है। सुडोकू हल करने के लिए कुछ नियम हैं।

हमें इस समस्या को हल करने के लिए 1 से 9 तक के अंकों का उपयोग करना होगा।

एक अंक को एक पंक्ति, एक कॉलम या एक 3 x 3 बॉक्स में दोहराया नहीं जा सकता।

बैकट्रैकिंग एल्गोरिदम का उपयोग करके, हम सुडोकू समस्या को हल करने का प्रयास करेंगे। जब किसी सेल को एक अंक से भरा जाता है, तो यह जांचता है कि यह वैध है या नहीं। जब यह वैध नहीं होता, तो यह अन्य नंबरों की जांच करता है। यदि 1-9 से सभी नंबर चेक किए गए हैं, और रखने के लिए कोई वैध अंक नहीं मिला, तो यह पिछले विकल्प पर बैकट्रैक करता है।

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

इनपुट: यह 9 x 9 मैट्रिक्स को सुडोकू ग्रिड के रूप में लेगा। कुछ मान ग्रिड में रखे गए हैं। खाली स्थानों को 0 से दर्शाया गया है। सुडोकू सॉल्विंग एल्गोरिदम आउटपुट: अंतिम मैट्रिक्स (सुडोकू ग्रिड) संख्याओं से भरा हुआ। यदि समाधान मौजूद नहीं है, तो यह false वापस करेगा। 3 1 6 | 5 7 8 | 4 9 2 5 2 9 | 1 3 4 | 7 6 8 4 8 7 | 6 2 9 | 5 3 1 ------------------------ 2 6 3 | 4 1 5 | 9 8 7 9 7 4 | 8 6 3 | 1 2 5 8 5 1 | 7 9 2 | 6 4 3 ------------------------ 1 3 8 | 9 4 7 | 2 5 6 6 9 2 | 3 5 1 | 8 7 4 7 4 5 | 2 8 6 | 3 1 9

एल्गोरिदम

isPresentInCol(col, num)

इनपुट: कॉलम, और लक्षित संख्या

आउटपुट - जब दी गई कॉलम में संख्या मौजूद हो तो True

Begin 
  for each row r in the grid, do 
    if grid[r, col] = num, then 
      return true 
  done 
  return false otherwise 
End

isPresentInRow(row, num)

इनपुट - पंक्ति, और लक्षित संख्या

आउटपुट - जब दी गई कॉलम में संख्या मौजूद हो तो True

Begin 
  for each column c in the grid, do 
    if grid[row, c] = num, then 
      return true 
  done 
  return false otherwise 
End

isPresentInBox(boxStartRow, boxStartCol, num)

इनपुट - 3 x 3 बॉक्स की शुरुआती पंक्ति और कॉलम, और लक्षित संख्या

आउटपुट - जब बॉक्स में संख्या मौजूद हो तो True

Begin 
  for each row r in boxStartRow to next 3 rows, do 
    for each col r in boxStartCol to next 3 columns, do 
      if grid[r, c] = num, then 
        return true 
    done 
  done 
  return false otherwise 
End

findEmptyPlace(row, col)

इनपुट: ग्रिड में पंक्ति और कॉलम

आउटपुट - यदि grid[row, col] खाली है, तो true वापस करें, अन्यथा false

Begin 
  for each row r in the grid, do 
    for each column c in the grid, do 
      if grid[r, c] = 0, then 
        return true 
    done 
  done 
  return false 
End

isValidPlace(row, col, num)

इनपुट: ग्रिड की पंक्ति, एक कॉलम, और जांचने के लिए संख्या

आउटपुट: True, जब संख्या को grid[row, col] स्थान पर रखना वैध हो

Begin 
  if isPresentInRow(row, num) and isPresentInCol(col, num) and isPresntInBox(row – row mod 3, col – col mod 3, num) all are false, then 
    return true 
End

solveSudoku(Sudoku Grid)

इनपुट: सुडोकू का अनसुलझा ग्रिड

आउटपुट: हल करने के बाद ग्रिड

Begin 
  if no place in the grid is empty, then 
    return true 
  for number 1 to 9, do 
    if isValidPlace(row, col, number), then 
      grid[row, col] := number 
      if solveSudoku = true, then 
        return true 
      grid[row, col] := 0 
  done 
  return false 
End

उदाहरण

#include  #define N 9 using namespace std; int grid[N][N] = { {3, 0, 6, 5, 0, 8, 4, 0, 0}, {5, 2, 0, 0, 0, 0, 0, 0, 0}, {0, 8, 7, 0, 0, 0, 0, 3, 1}, {0, 0, 3, 0, 1, 0, 0, 8, 0}, {9, 0, 0, 8, 6, 3, 0, 0, 5}, {0, 5, 0, 0, 9, 0, 6, 0, 0}, {1, 3, 0, 0, 0, 0, 2, 5, 0}, {0, 0, 0, 0, 0, 0, 0, 7, 4}, {0, 0, 5, 2, 0, 6, 3, 0, 0} }; bool isPresentInCol(int col, int num) { //check whether num is present in col or not for (int row = 0; row < N; row++) if (grid[row][col] == num) return true; return false; } bool isPresentInRow(int row, int num) { //check whether num is present in row or not for (int col = 0; col < N; col++) if (grid[row][col] == num) return true; return false; } bool isPresentInBox(int boxStartRow, int boxStartCol, int num) { //check whether num is present in 3x3 box or not for (int row = 0; row < 3; row++) for (int col = 0; col < 3; col++) if (grid[row+boxStartRow][col+boxStartCol] == num) return true; return false; } void sudokuGrid() { //print the sudoku grid after solve for (int row = 0; row < N; row++) { for (int col = 0; col < N; col++) { if(col == 3 || col == 6) cout << " | "; cout << grid[row][col] <<" "; } if(row == 2 || row == 5) { cout << endl; for(int i = 0; i

आउटपुट

3 1 6 | 5 7 8 | 4 9 2 5 2 9 | 1 3 4 | 7 6 8 4 8 7 | 6 2 9 | 5 3 1 ------------------------ 2 6 3 | 4 1 5 | 9 8 7 9 7 4 | 8 6 3 | 1 2 5 8 5 1 | 7 9 2 | 6 4 3 ------------------------ 1 3 8 | 9 4 7 | 2 5 6 6 9 2 | 3 5 1 | 8 7 4 7 4 5 | 2 8 6 | 3 1 9
  1. C++ में वैलिड सुडोकू C++ में वैलिड सुडोकू

    मान लीजिए हमें 9×9 मैट्रिक्स दिया गया है जिसे सुडोकू कहा जाता है। कार्य यह जांचना है कि दिया गया सुडोकू पैटर्न मान्य है या नहीं। सामान्य तौर पर, एक सुडोकू बोर्ड इस तरह दिखता है, सुडोकू के नियम - हर रो में 1-9 की रेंज में एक नंबर होता है हर कॉलम में 1-9 की रेंज में नंबर होते हैं। 3×3 का प्रत्येक ब्

  1. आंशिक रूप से भरे सुडोकू ग्रिड को हल करने का प्रोग्राम C++ में आंशिक रूप से भरे सुडोकू ग्रिड को हल करने का प्रोग्राम C++ में

    मान लीजिए हमारे पास एक आंशिक रूप से भरा सुडोकू ग्रिड है और हमें इसे हल करना है। हम जानते हैं कि सुडोकू एक 9 × 9 संख्या ग्रिड है, और पूरा ग्रिड 3 × 3 बॉक्स में भी विभाजित है। सुडोकू हल करने के कुछ नियम हैं। हमें इस समस्या को हल करने के लिए 1 से 9 तक के अंकों का उपयोग करना है। एक अंक को एक पंक्ति, एक

  1. Python में सुडोकू ग्रिड हल करने योग्य है या नहीं, इसकी पुष्टि करने का प्रोग्राम Python में सुडोकू ग्रिड हल करने योग्य है या नहीं, इसकी पुष्टि करने का प्रोग्राम

    मान लीजिए हमारे पास एक 9x9 सुडोकू ग्रिड है। हमें यह जांचना है कि वह वैध है या नहीं। केवल भरे हुए सेल को निम्नलिखित नियमों के अनुसार मान्य करने की आवश्यकता है: प्रत्येक पंक्ति में 1-9 के अंक बिना दोहराव के होने चाहिए। प्रत्येक कॉलम में 1-9 के अंक बिना दोहराव के होने चाहिए। ग्रिड के 9 (3x3) सब-बॉक्स