LeetCode---Sudoku Solver

来源:互联网 发布:域名备案被别人注册 编辑:程序博客网 时间:2024/06/05 11:02

题目大意:编写一个程序解决数独问题,要求填满表中的空白位置,使得其所在的行和列以及所在的宫没有相同元素。

算法思想:

1.遍历该表格,寻找空白位置。

2.对于每个空白位置,枚举放置1~9这9个数字,并判断是否有效且递归深搜。

3.还原空白位置。

4。如果此时没有可行方案返回false

5.遍历完表格返回真。

代码如下:

class Solution {public:bool solveSudoku(vector<vector<char> >& board) {for (int i = 0; i < 9;++i){for (int j = 0; j < 9;++j){if (board[i][j] == '.'){for (int k = 0; k < 9;++k){board[i][j] = k +'1';if (isValid(board, i, j) && solveSudoku(board))return true;    board[i][j] ='.';}    return false;}}}return true;}private:bool isValid(vector<vector<char> >&board,int x,int y){for (int i = 0; i < 9;++i)if (i != x&&board[i][y] == board[x][y])return false;for (int j = 0; j < 9;++j)if (j != y&&board[x][j] == board[x][y])return false;for (int i = 3 * (x / 3); i < 3 * (x / 3 + 1);++i){for (int j = 3 * (y / 3); j < 3 * (y / 3 + 1);++j){if ((i != x || j != y) && board[x][y]==board[i][j])return false;}}return true;}};


0 0