陷入数独作业的回溯步骤

我对java很陌生(特别是回溯),我做了一个递归数独求解器几乎两天但没有成功。我认为我的回溯步骤是错误的,但我真的不知道如何修复它。输入是包含数字和字符“.”的 .txt。代表程序需要实现的地方。(ps:Std.In是我老师教科书给出的一个库,它读取.txt并帮助将其转换为semiboard数组)。

我知道问题不在于回溯(检查数字是否已根据数独规则分配的回溯)和相关函数。

StdIn 库可以在以下网站下载: https: //introcs.cs.princeton.edu/java/stdlib/

我收到一个空输出,没有异常消息。


这是.txt:


. . . . 6 . . . 5 

6 2 4 . . . . 1 . 

. . 1 . . . 3 . . 

. . . . . 4 . 3 7 

. . . 1 . . 5 . . 

. . 7 5 . . . 9 . 

. 8 2 4 7 . . . . 

. 9 . 3 1 . . . . 

. . . . 2 9 . 5 3 

StdIn.readString 在以下链接中定义: https://introcs.cs.princeton.edu/java/stdlib/StdIn.java.html


月关宝盒
浏览 65回答 1
1回答

Helenr

你从未达到条件为cell == 81真的状态。我没有进行调试来确切说明原因是什么。基本上是你的backtrack方法有问题。现在的样子是这样的:    private static boolean backtrack(int[] board, int cell, int value) {    int line = cell / 9;    //check line    for (int i = 0; i < 9; i++) {        if ((board[line * 9 + i] == value)) {            return true;        }    }    int column = cell % 9;    //check column    for (int i = 0; i < 9; i++) {        if (board[column + i * 9] == value) {            return true;        }    }    int squareLine = line - (line % 3);    int squareColumn = column - (column % 3);    //check square    for (int i = 0; i < 3; i++) {        for (int j = 0; j < 3; j++) {            if (board[(squareLine + i) * 9 + (squareColumn + j)] == value) {                return true;            }        }    }    return false;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java