Sudoku Solver : 53 lines and 12 ms

原创 2015年07月09日 09:13:29
class Solution {
public:
    bool helper(int r, int c, int mpRow[][9], int mpCol[][9], int mpGroup[][9], vector<vector<char> >& board) {
		if (r >= 9) {
			return true;
		}
		if (c >= 9){
			c = 0;
			if (helper(r+1, c, mpRow, mpCol, mpGroup, board)) 
				return true;
			return false;
		}
		if (board[r][c] != '.'){
			if (helper(r, c+1, mpRow, mpCol, mpGroup, board)) 
				return true;  
			return false;
		}
		for (int i = 0; i < 9; ++ i) {
			int are = r/3*3+c/3;
			if (board[r][c] == '.' && isValidNum(mpRow[r], mpCol[c], mpGroup[are], i)) {
				board[r][c] = '1' + i;
				mpRow[r][i] = mpCol[c][i] = mpGroup[are][i] = 1;
				if (helper(r, c+1, mpRow, mpCol, mpGroup, board))
					return true;
				board[r][c] = '.';
				mpRow[r][i] = mpCol[c][i] = mpGroup[are][i] = 0;
			}
		}
		return false;
    }
    
    bool isValidNum(int *mpRow, int *mpCol, int *mpGroup, int num) {
        if (mpRow[num] == 0 && mpCol[num] == 0 && mpGroup[num] == 0)
            return true;
        return false;
    }
    
    void solveSudoku(vector<vector<char> >& board) {
        int mpRow[9][9] = {{0}};
        int mpCol[9][9] = {{0}};
        int mpGroup[9][9] = {{0}};
        for (int i = 0; i < 9; ++ i) {
            for (int j = 0; j < 9; ++ j) {
                char c = board[i][j];
                if (c == '.')
                    continue;
                mpRow[i][c-'1'] = 1;
                mpCol[j][c-'1'] = 1;
                mpGroup[i/3*3+j/3][c-'1'] = 1;
            }
        }
		helper(0, 0, mpRow, mpCol, mpGroup, board);
    }
};

相关文章推荐

leetcode系列(53)Sudoku Solver

Write aprogram to solve a Sudoku puzzle by filling the empty cells. Emptycells are indicated by the...
  • macchan
  • macchan
  • 2015年10月31日 21:20
  • 172

37. Sudoku Solver : 代码的优化:从1865ms 到 489ms 到最后69ms AC

题目: Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicate...

Valid Sudoku and Sudoku Solver leetcode

Valid Sudoku

Valid Sudoku and Sudoku Solver

Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.The Sudoku board could be p...
  • pupuzay
  • pupuzay
  • 2015年10月15日 10:04
  • 105

Sudoku solver in C++ (数独计算器)

  • 2011年02月08日 23:20
  • 408KB
  • 下载

LeetCode OJ:Sudoku Solver

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

LeetCode Sudoku Solver

题目 Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated ...

37. Sudoku Solver

这样的题目一般通过回溯法求解,设置某个空格时,如果该空格无论设置什么数字都无法达到合法状态,那么回溯重新设置上一个空格,详见代码注释。注意,这样的题目一定要想明白每一处细节,才能够作对。代码如下: ...

Leetcode Sudoku Solver My Submissions Question

Leetcode Sudoku Solver My Submissions Question ,本问题主要是使用递归的思想,不断的试探,直到得出结果,同时也得注意记录已有值的方法,主要是横向、纵向、...

Leetcode-Sudoku Solver

Write a program to solve a Sudoku puzzle by filling the empty cells.Empty cells are indicated by the...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Sudoku Solver : 53 lines and 12 ms
举报原因:
原因补充:

(最多只允许输入30个字)