Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import java.io.*;
- public class Sudoku {
- public static void main (String[] args) throws FileNotFoundException {
- File inputPuzzle = new File(args[0]);
- Scanner Console = new Scanner(inputPuzzle);
- int puzzle[][] = new int[9][9];
- for (int i = 0; i < 9; i++) {
- for (int j = 0; j < 9; j++) {
- puzzle[i][j] = Console.nextInt();
- }
- }
- if (handleArgs(args, inputPuzzle)){
- if (solve(puzzle)) {
- printPuzzle(puzzle);
- System.out.println("Puzzle Solved!");
- } else {
- System.out.println("Puzzle has no solution");
- }
- }
- }
- public static boolean handleArgs(String[] args, File inputPuzzle){
- if (args.length != 1) {
- System.out.println("Wrong number of command line arguments.");
- System.out.println("Usage: sudokuSolver input_file_name");
- return false;
- }
- if (!inputPuzzle.canRead()) {
- System.out.println("The file " + args[0] + " cannot be opened for input.");
- return false;
- }
- return true;
- }
- public static boolean solve(int[][] puzzle) {
- int row = 0;
- int col = 0;
- // base case
- if (!checkForBlanks(puzzle, row, col)){
- return true;
- }
- for (int num = 1; num <= 9; num++) {
- if (numCheck(num, row, col, puzzle)) {
- puzzle[row][col] = num;
- if (solve(puzzle)) {
- return true;
- } else {
- puzzle[row][col] = 0;
- }
- }
- }
- return false;
- }
- public static boolean checkForBlanks(int[][] puzzle, int row, int col) {
- for (row = 0; row <= 9; row++) {
- for (col = 0; col <= 9; col++) {
- if (puzzle[row][col] == 0){
- return true;
- }
- }
- }
- return false;
- }
- public static boolean numCheck(int num, int row, int col, int[][] puzzle){
- for (int r = 0; r < 9; r++) {
- if (puzzle[r][col] == num) {
- return false;
- }
- }
- for (int c = 0; c < 9; c++) {
- if (puzzle[row][c] == num) {
- return false;
- }
- }
- int startRow = (row/3)*3;
- int startCol = (col/3)*3;
- for (int i = startRow; i < startRow + 2; i++) {
- for (int j = startCol; j < startCol + 2; j++) {
- if (puzzle[i][j] == num) {
- return false;
- }
- }
- }
- return true;
- }
- public static void printPuzzle(int[][] puzzle) {
- for (int r = 0; r <= 9; r++) {
- for (int c = 0; c <= 9; c++) {
- System.out.print(puzzle[r][c]);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement