java - 如何构造我的程序以返回递归函数的成功输出?

标签 java algorithm recursion sudoku

我正在制作数独解算器(没有演练/算法作弊)。本质上,我的假设函数的工作原理如下:

  1. 以网格为参数,使用基本逻辑(依赖于它们是一个值的唯一可能位置)尽可能解决它,而无需猜测/做更复杂的逻辑。
  2. 一旦到达一个没有明显值的点,找到一个最小可能性为 n(通常为 2)的单元格,克隆网格 n 次并替换将可能性放入单元格中,然后为每个新网格再次调用该函数。
  3. 如果网格出现矛盾,则终止该函数调用。
  4. 如果网格已求解,则将类变量 solvedGrid[][] 设置为求解的网格。

在此设置中,我将创建类、调用函数,然后从 solvedGrid[][] 字段中检索答案。我的递归函数本身有一个 void 返回值,或者我可以将其设为 boolean 以确定已找到解决方案。无论哪种方式,我都想不出返回 byte[][] 的方法,因为我将从 1 个函数实例多次调用该函数。提前谢谢你。

(此外,对于创建过此类程序的任何人 - 我提出的算法是否真的有效?)

最佳答案

返回已解决的网格,如果发现矛盾则返回 null。不需要让返回值成为类成员,我什至会说糟糕的设计。 是的,你的算法听起来不错。数独网格空间中的深度优先搜索。

关于java - 如何构造我的程序以返回递归函数的成功输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29957869/

相关文章:

java - 如何监视 ObservableList JavaFX 中包含的对象的变化

java - 布冯针(Java实现)

c++ - 加泰罗尼亚数字,递归函数时间复杂度

MySQL 树层次结构查询?

c# - 谁能一眼就告诉我为什么这个 Action 这么慢?

java - 提示 EditText

java - 在 Java 中管理源文件和类文件

java - 我有一个代码。它工作正常,直到我在其中添加了一个额外的方法

performance - 快速乘法

java - 在 JSoup 文档中获取所有节点(递归)的最快方法