fork download
  1. #include <bits/stdc++.h>
  2.  
  3. class Sudoku {
  4. std::vector<std::string> board{9};
  5.  
  6. bool is_valid(int row, int col, char digit) {
  7. for (int i = 0; i < 9; ++i)
  8. if (board[row][i] == digit ||
  9. board[i][col] == digit ||
  10. board[row / 3 * 3 + i / 3][col / 3 * 3 + i % 3] == digit)
  11. return false;
  12. return true;
  13. }
  14.  
  15. public:
  16. void read() {
  17. for(auto &row : board)
  18. std::getline(std::cin, row);
  19. }
  20.  
  21. void print() const {
  22. for(auto &row : board)
  23. std::cout << row << '\n';
  24. }
  25.  
  26. bool solve(int row = 0, int col = 0) {
  27. if (col == 9) return solve(row + 1, 0);
  28. if (row == 9) return true;
  29. if (board[row][col] != '0')
  30. return solve(row, col + 1);
  31. for (char d = '1'; d <= '9'; ++d)
  32. if (is_valid(row, col, d)) {
  33. board[row][col] = d;
  34. if (solve(row, col + 1))
  35. return true;
  36. board[row][col] = '0';
  37. }
  38. return false;
  39. }
  40. };
  41.  
  42. int main() {
  43. Sudoku sudoku{};
  44. int n;
  45. std::cin >> n;
  46. std::cin.ignore();
  47. while (n--) {
  48. sudoku.read();
  49. sudoku.solve();
  50. sudoku.print();
  51. std::cout << '\n';
  52. }
  53. }
Success #stdin #stdout 0.01s 5516KB
stdin
1
061030240
005000100
840000069
100090004
600403005
030607080
000000000
008050400
000948000
stdout
761539248
925864173
843721569
187295634
692483715
534617982
459376821
378152496
216948357