मान लीजिए हमारे पास एक 9x9 सुडोकु बोर्ड है। हमें जांचना है कि वह वैध है या नहीं। केवल भरे हुए सेल्स को निम्न नियमों के अनुसार मान्य करने की आवश्यकता है -
- प्रत्येक पंक्ति में 1-9 तक के अंक बिना दोहराव के होने चाहिए।
- प्रत्येक कॉलम में 1-9 तक के अंक बिना दोहराव के होने चाहिए।
- ग्रिड के 9 (3x3) सब-बॉक्स में से प्रत्येक में 1-9 तक के अंक बिना दोहराव के होने चाहिए।
मान लीजिए सुडोकु ग्रिड इस तरह है -
| 5 | 3 | 7 | ||||||
| 6 | 1 | 9 | 5 | |||||
| 9 | 8 | 6 | ||||||
| 8 | 6 | 3 | ||||||
| 4 | 8 | 3 | 1 | |||||
| 7 | 2 | 6 | ||||||
| 6 | 2 | 8 | ||||||
| 4 | 1 | 9 | 5 | |||||
| 8 | 7 | 9 |
यह वैध है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- i के लिए 0 से 8 तक की रेंज में
- कुछ खाली डिक्शनरी row, col और block बनाएं, row_cube := 3 * (i / 3), और col_cube := 3 * (i mod 3)
- j के लिए 0 से 8 तक की रेंज में
- यदि board[i, j] खाली नहीं है और board[i, j] row में है, तो false लौटाएं
- row[board[i, j]] := 1
- यदि board[j, i] खाली नहीं है और board[j, i] col में है, तो false लौटाएं
- col[board[j, i]] := 1
- rc := row_cube + j/3 और cc := col_cube + j mod 3
- यदि board[rc, cc] block में है और board[rc, cc] खाली नहीं है, तो false लौटाएं
- block[board[rc, cc]] := 1
- true लौटाएं
उदाहरण (पायथन)
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -
class Solution(object): def isValidSudoku(self, board): """ :type board: List[List[str]] :rtype: bool """ for i in range(9): row = {} column = {} block = {} row_cube = 3 * (i//3) column_cube = 3 * (i%3) for j in range(9): if board[i][j]!='.' and board[i][j] in row: return False row[board[i][j]] = 1 if board[j][i]!='.' and board[j][i] in column: return False column[board[j][i]] = 1 rc= row_cube+j//3 cc = column_cube + j%3 if board[rc][cc] in block and board[rc][cc]!='.': return False block[board[rc][cc]]=1 return True ob1 = Solution() print(ob1.isValidSudoku([ ["5","3",".",".","7",".",".",".","."], ["6",".",".","1","9","5",".",".","."], [".","9","8",".",".",".",".","6","."], ["8",".",".",".","6",".",".",".","3"], ["4",".",".","8",".","3",".",".","1"], ["7",".",".",".","2",".",".",".","6"], [".","6",".",".",".",".",".","2","8","."], [".",".",".",".","4","1","9",".",".","5"], [".",".",".",".",".","8",".",".","7","9"]]))इनपुट
[["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9","8",".",".",".",".","6","."],["8",".",".",".","6",".",".",".","3"],["4",".",".","8",".","3",".",".","1"],["7",".",".",".","2",".",".",".","6"],[".","6",".",".",".",".",".","2","8","."],[".",".",".",".","4","1","9",".",".","5"],[".",".",".",".",".","8",".",".","7","9"]]
आउटपुट
true