算法分析与设计课程(8):【leetcode】Sudoku Solver

    xiaoxiao2021-04-15  35

    Description:

    Write a program to solve a Sudoku puzzle by filling the empty cells.

    Empty cells are indicated by the character '.'.

    You may assume that there will be only one unique solution.

    A sudoku puzzle.

    ...and its solution numbers marked in red.

    算法分析:

    这题可以采用回溯法。

    本题找到解的处理是return true,因此返回值为bool。

    对于每个空位'.',遍历1~9,check合理之后往下一个位置递归。

    由于这里路径尝试本质上是有序的,即1~9逐个尝试,因此无需额外设置状态位记录已经尝试过的方向。

    注意:只有正确达到最终81位置(即成功填充)的填充结果才可以返回,若不然,将会得到错误的填充。

    因此辅助函数solve需要设为bool而不是void。

    代码如下:

    __author__ = 'andy' class Solution: # @param board, a 9x9 2D array # Solve the Sudoku by modifying the input board in-place. # Do not return any value. def check(self, x, y, board): tmp = board[x][y] board[x][y] = '.' for row in range(9): if board[row][y] == tmp: return False for col in range(9): if board[x][col] == tmp: return False for row in range(3): for col in range(3): if board[(x / 3) * 3 + row][(y / 3) * 3 + col] == tmp: return False board[x][y] = tmp return True def dfs(self, board): for row in range(9): for col in range(9): if board[row][col] == '.': for char in '123456789': board[row][col] = char if self.check(row, col, board) and self.dfs(board): return True board[row][col] = '.' return False return True def solveSudoku(self, board): self.dfs(board)

    转载请注明原文地址: https://ju.6miu.com/read-671726.html

    最新回复(0)