less than 1 minute read

<-H 37> Sudoku Solver

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

	bool solve_suduko(vector<vector<char>>& board) {
		int n = board.size();
		int m = board[0].size();
		for(int i = 0;i < n; i++) {
			for(int j = 0; j < m; j++) {
				if(board[i][j] == '.') {
					for(char ch = '1'; ch <= '9'; ch++) {
						if(isvalid(board, ch, i, j)) {
							board[i][j] = ch;
							if(solve_suduko(board))
                                return true;
							else board[i][j] = '.';
						}
					}
					return false;
				}
			}
		}
		return true;
	}

	bool isvalid(vector<vector<char>>& board,char ch,int row,int col) {
		for(int i = 0; i < 9; i++) {
			if(board[row][i] == ch)
                return false;
			if(board[i][col] == ch)
                return false;
			if(board[3 * (row / 3) + i / 3][3 * (col / 3) + i % 3] == ch)
                return false;
		}
		return true;
	}
};