G2A Many GEOs
SHARE
TWEET

Untitled

a guest Mar 29th, 2020 83 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
Ledger Nano X - The secure hardware wallet
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top