สมมติว่าเรามีกระดานซูโดกุ 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[board[i, j]] :=1
- ถ้า board[j, i] ไม่ว่างและ board[j, i] เป็น col ให้คืนค่าเท็จ
- col[board[j, i]] :=1
- rc :=row_cube + j/3 และ cc :=col_cube + j mod 3
- ถ้า board[rc, cc] ใน block และ board[rc, cc] ไม่ว่าง ให้คืนค่าเท็จ
- บล็อก[บอร์ด[rc, cc]] :=1
- คืนค่าจริง
ตัวอย่าง(Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น −
คลาส Solution(object):def isValidSudoku(self, board):""" :type board:List[List[str]] :rtype:bool """ for i in range(9):row ={} คอลัมน์ ={} block ={} row_cube =3 * (i//3) column_cube =3 * (i%3) สำหรับ j ในช่วง (9):if board[i][j]!='.' และ board[i][j] ในแถว:คืนค่า False row[board[i][j]] =1 if board[j][i]!='.' และ board[j][i] ในคอลัมน์:คืนค่า False column[board[j][i]] =1 rc=row_cube+j//3 cc =column_cube + j%3 if board[rc][cc] ในบล็อก และ board[rc][cc]!='.':return False block[board[rc][cc]]=1 return Trueob1 =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"]]ผลลัพธ์
จริง