Advertisement
Guest User

Untitled

a guest
Mar 29th, 2020
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.87 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.io.*;
  3.  
  4. public class Sudoku {
  5.  
  6. public static void main (String[] args) throws FileNotFoundException {
  7.  
  8. File inputPuzzle = new File(args[0]);
  9. Scanner Console = new Scanner(inputPuzzle);
  10.  
  11. int puzzle[][] = new int[9][9];
  12.  
  13. for (int i = 0; i < 9; i++) {
  14. for (int j = 0; j < 9; j++) {
  15. puzzle[i][j] = Console.nextInt();
  16. }
  17. }
  18.  
  19. if (handleArgs(args, inputPuzzle)){
  20. if (solve(puzzle)) {
  21. printPuzzle(puzzle);
  22. System.out.println("Puzzle Solved!");
  23. } else {
  24. System.out.println("Puzzle has no solution");
  25. }
  26. }
  27. }
  28.  
  29. public static boolean handleArgs(String[] args, File inputPuzzle){
  30.  
  31. if (args.length != 1) {
  32. System.out.println("Wrong number of command line arguments.");
  33. System.out.println("Usage: sudokuSolver input_file_name");
  34. return false;
  35. }
  36.  
  37. if (!inputPuzzle.canRead()) {
  38. System.out.println("The file " + args[0] + " cannot be opened for input.");
  39. return false;
  40. }
  41.  
  42. return true;
  43.  
  44. }
  45.  
  46. public static boolean solve(int[][] puzzle) {
  47.  
  48. int row = 0;
  49. int col = 0;
  50.  
  51. // base case
  52. if (!checkForBlanks(puzzle, row, col)){
  53. return true;
  54. }
  55.  
  56. for (int num = 1; num <= 9; num++) {
  57. if (numCheck(num, row, col, puzzle)) {
  58. puzzle[row][col] = num;
  59. if (solve(puzzle)) {
  60. return true;
  61. } else {
  62. puzzle[row][col] = 0;
  63. }
  64. }
  65. }
  66.  
  67. return false;
  68.  
  69. }
  70.  
  71. public static boolean checkForBlanks(int[][] puzzle, int row, int col) {
  72.  
  73. for (row = 0; row <= 9; row++) {
  74. for (col = 0; col <= 9; col++) {
  75. if (puzzle[row][col] == 0){
  76. return true;
  77. }
  78. }
  79. }
  80.  
  81. return false;
  82.  
  83. }
  84.  
  85. public static boolean numCheck(int num, int row, int col, int[][] puzzle){
  86.  
  87. for (int r = 0; r < 9; r++) {
  88. if (puzzle[r][col] == num) {
  89. return false;
  90. }
  91. }
  92.  
  93. for (int c = 0; c < 9; c++) {
  94. if (puzzle[row][c] == num) {
  95. return false;
  96. }
  97. }
  98.  
  99. int startRow = (row/3)*3;
  100. int startCol = (col/3)*3;
  101. for (int i = startRow; i < startRow + 2; i++) {
  102. for (int j = startCol; j < startCol + 2; j++) {
  103. if (puzzle[i][j] == num) {
  104. return false;
  105. }
  106. }
  107. }
  108.  
  109. return true;
  110.  
  111. }
  112.  
  113. public static void printPuzzle(int[][] puzzle) {
  114.  
  115. for (int r = 0; r <= 9; r++) {
  116. for (int c = 0; c <= 9; c++) {
  117. System.out.print(puzzle[r][c]);
  118. }
  119. }
  120. }
  121.  
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement