首页 > 解决方案 > 我的解决方法出错并且不打印真假

问题描述

我有一个数独求解器。我努力让代码工作。

这是我主要的印刷品

    public static void main(String args[]) throws IOException {

        int[][] newBoard = getFile("src/test/resources/2F.txt");
        Sudoku sdk = new Sudoku(newBoard);
        sdk.showSudoku();
    }   

这是我的数独课

class Sudoku {
    private static int sudokuArray[][];
    private int[][] board;
    private static final int SIZE = 9;
    
    public Sudoku (int[][] s) {
        // ENTER CODE HERE
        //board = sudokuArray;
        //solveSudoku(s);
        this.board = s;
    }

    public void showSudoku() {
        // ENTER CODE HERE
        if (solveSudoku(board)) {
            System.out.println("Solved successfully!");
            System.out.println("True");
        }
        else {
            System.out.println("Unsolvable board");
            System.out.println("False");
        }

    } 

    public boolean solveSudoku(int[][] board) {
        for(int i = 0; i < SIZE; i++) {
            for(int j = 0; j < SIZE; j++) {
                if(board[i][j] == 0) {
                    for (int num = 1; num <= 9; num++) {
                        if (isValidSolution(board, i, j, num)) {
                            board[i][j] = num;
                            if(solveSudoku(board)) {
                                return true;
                            } else {
                                board[i][j] = 0;
                            }
                        }
                    }
                    return false; // no solution
                }
            }
        }
        return true; // valid solution
    }

    private static boolean isValidSolution(int[][] board,int i,int j,int c) {
        /* Check rows */
        // ENTER CODE HERE
        for (int row = 0; row < 9; row ++) {
            if(board[row][j] == c)
        return false;
        }
        /* Check columns */
        // ENTER CODE HERE
        for (int col = 0; col < 9; col++) {
            if(board[i][col] == c)
        return false;
        }
        /* Check  subgrids */
        // ENTER CODE HERE
        for (int row = i / 3 * 3; row < i / 3 * 3 + 3; row ++) {
            for(int col = j/3*3; col < j/3*3+3; col++){
                if(board[row][col] == c)
            return false;
            }
        }
        return true;
    }
}

如何打印结果和真/假。我的代码中有一个错误来检查有效的解决方案。出于某种原因,一切都变得真实。另外,我在第 16,18 行遇到了一个 io 异常,因为我要接受 new String[]{"src/test/resources/1F.txt"}) 作为输入并使用它。

9 5 7 6 1 3 2 8 4 
4 8 3 2 5 7 1 9 6 
6 1 2 8 4 9 5 3 7 
1 7 8 3 6 4 9 5 2 
5 2 4 9 7 1 3 6 8 
3 6 9 5 2 8 7 4 1 
8 4 5 7 9 3 6 1 3 
2 9 1 4 3 6 8 7 5 
7 3 6 1 8 5 4 2 9 
Solved successfully!
True

以上是我的结果。如何在不从 getFile 打印板的情况下获取文件并使用它。

标签: javarecursionsudoku

解决方案


推荐阅读