您的位置:首页 > 其它

leetcode Sudoku Solver

2014-10-22 20:09 573 查看
利用回溯法, 参考/article/4879767.html

代码

class Solution {
public:
void solveSudoku(vector<vector<char> > &board) {

for(int i = 0; i < 9; ++i)
for(int j = 0; j < 9; ++j)
{
if(board[i][j]!='.')
fill(i, j, board[i][j]-'0');
}

solveSudokuHelper(board, 0);
}

void fill(int row, int col, int val)
{
rowValid[row][val] = 1;
colValid[col][val] = 1;
subBoardValid[row/3*3+col/3][val] = 1;
}

bool solveSudokuHelper(vector<vector<char> > &board, int index)
{
if(index>80)
return true;
int row = index/9;
int col = index - 9*row;
if(board[row][col]!='.')
return solveSudokuHelper(board, index+1);
for(int val = '1'; val <= '9'; ++val)
{
if(isValid(row, col, val-'0'))
{
board[row][col] = val;
fill(row, col, val-'0');
if(solveSudokuHelper(board, index+1))
return true;
clear(row, col, val-'0');
board[row][col] = '.';

}

}

return false;

}

bool isValid(int row, int col, int val)
{
if(rowValid[row][val] == 0 &&
colValid[col][val] == 0 &&
subBoardValid[row/3*3+col/3][val] == 0)
return true;
return false;
}

void clear(int row, int col, int val)
{
rowValid[row][val] = 0;
colValid[col][val] = 0;
subBoardValid[row/3*3+col/3][val] = 0;
}

private:
int rowValid[9][10];
int colValid[9][10];
int subBoardValid[9][10];

};



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: