fork download
  1. #include <vector>
  2. #include <iostream>
  3. using namespace std;
  4. class Solution {
  5. private:
  6. bool solve(vector<vector<char>> &board){
  7. for(int i=0; i<9; i++){
  8. for(int j=0; j<9; j++){
  9. if(board[i][j] == '.'){
  10. for(char ch='1'; ch<='9'; ch++){
  11. if(isValid(board, i, j, ch)){
  12. board[i][j] = ch;
  13. if(solve(board))
  14. return true;
  15. else{
  16. board[i][j] = '.';
  17. }
  18. }
  19. }
  20. return false;
  21. }
  22.  
  23. }
  24. }
  25. return true;
  26. }
  27.  
  28. bool isValid(vector<vector<char>>& board, int row, int col, char ch){
  29. for(int i=0; i<9; i++){
  30. if(board[row][i] == ch) return false;
  31. if(board[i][col] == ch) return false;
  32. if(board[3*(row/3) + i/3][3*(col/3) + i%3] == ch) return false;
  33. }
  34.  
  35. return true;
  36. }
  37.  
  38. public:
  39. void solveSudoku(vector<vector<char>>& board) {
  40. solve(board);
  41. }
  42. };
  43.  
  44. int main() {
  45. Solution solution;
  46. vector<vector<char>> board = {
  47. {'5', '3', '.', '.', '7', '.', '.', '.', '.'},
  48. {'6', '.', '.', '1', '9', '5', '.', '.', '.'},
  49. {'.', '9', '8', '.', '.', '.', '.', '6', '.'},
  50. {'8', '.', '.', '.', '6', '.', '.', '.', '3'},
  51. {'4', '.', '.', '8', '.', '3', '.', '.', '1'},
  52. {'7', '.', '.', '.', '2', '.', '.', '.', '6'},
  53. {'.', '6', '.', '.', '.', '.', '2', '8', '.'},
  54. {'.', '.', '.', '4', '1', '9', '.', '.', '5'},
  55. {'.', '.', '.', '.', '8', '.', '.', '7', '9'}
  56. };
  57. solution.solveSudoku(board);
  58. for (const auto& row : board) {
  59. for (const auto& cell : row) {
  60. cout << cell << " ";
  61. }
  62. cout << endl;
  63. }
  64.  
  65. return 0;
  66. }
  67.  
  68.  
Success #stdin #stdout 0.01s 5280KB
stdin
Standard input is empty
stdout
5 3 4 6 7 8 9 1 2 
6 7 2 1 9 5 3 4 8 
1 9 8 3 4 2 5 6 7 
8 5 9 7 6 1 4 2 3 
4 2 6 8 5 3 7 9 1 
7 1 3 9 2 4 8 5 6 
9 6 1 5 3 7 2 8 4 
2 8 7 4 1 9 6 3 5 
3 4 5 2 8 6 1 7 9