Sudoku Solver
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.
class Solution { vector<vector<char> > b; bool checkRow(int row, char val){ for(int ii = 0; ii < 9; ++ii){ if (b[row][ii] == val) return false; } return true; } bool checkCol(int col, char val){ for(int ii = 0; ii < 9; ++ii){ if (b[ii][col] == val) return false; } return true; } bool checkBlock(int row, int col, char val){ row = row/3*3; col = col/3*3; for(int ii = row; ii < row+3; ++ii){ for(int jj = col; jj < col+3; ++jj){ if (b[ii][jj] == val) return false; } } return true; } bool process(int row, int col){ int index = row*9 + col; if (index > 80) return true; int next_index = index+1; int next_row = next_index/9; int next_col = next_index - next_row*9; if (b[row][col] == '.'){ for(int ii = '1'; ii <= '9'; ++ii){ if (checkRow(row,ii) && checkCol(col,ii) && checkBlock(row,col,ii)){ b[row][col] = ii; if(process(next_row, next_col)) return true; else{ b[row][col] = '.'; } } } return false; }else{ return process(next_row, next_col); } } public: void solveSudoku(vector<vector<char> > &board) { // Start typing your C/C++ solution below // DO NOT write int main() function b = board; process(0,0); board = b; return; } };
No comments:
Post a Comment