问题标签 [sudoku]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1480 浏览

java - 比较块数独 Java 中的整数

你好,我正在研究一个数独检查器,它可以验证完成的电路板的解决方案是否正确。我目前对如何在块内进行检查感到困惑。现在我有一个布尔值如下,我检查左上块(Block1)。我不确定将其设置为哪些参数以及如何成功运行这两个 for 循环。

问题是我想检查一个 2d 数组的一部分,它也压缩成 3x3 正方形,看看该区域中的整数是否不重复,只有 1-9 出现一次。我有类似的代码,我在其中编写了这个代码来检查一行是否有重复的整数和一列。

这是我用作制作块检查器的参考的行检查器

0 投票
2 回答
603 浏览

java - 扫描输入并跳过某些字符

我正在扫描一个带有几个分隔符的数独板的文本文件。这就是示例输入的样子。

哪里有“|” 作为边界和 =====+====+==== 作为分隔符。我做了这个代码来忽略 | 和 ====+===+=== 但它跳过了那部分代码并将它们声明为无效字符并在那里添加 0

我和导师讨论过,但我不记得他关于如何解决这个问题的建议。

0 投票
1 回答
441 浏览

java - 比较某个块数独 Java 中的整数

所以我更新了我的代码,但我仍然不知道如何检查一个完整的数独板中的 3x3 块,看看它是否没有任何重复的数字。这是我更新的方法。

这是调用方法,我不知道要向方法 isBlock1Valid 发送哪些参数

0 投票
2 回答
6822 浏览

java - 从 9x9 二维数组 java 创建 9 个子数组

您好,我需要帮助从 9x9 数组创建 9 个 3x3 维度的子数组。我已经看到 stackOverflow 已经提出了类似的问题,但不幸的是它是在 c++ 中。谁能指出我如何创建子数组的正确方向。

编辑:有一个相似的更改为有一个相似的

这是我的验证类,它调用我已经实现的布尔表达式。我不确定在验证中发送布尔值的参数。并考虑重新排列它,以便我发送 3x3 尺寸的块。

和 c++ 链接 将 9x9 2d 数组划分为 9 个子网格(如数独)?(C++)

0 投票
2 回答
1159 浏览

performance - 在 Haskell 上优化数独求解器

我在 Haskell 中编写了一个数独求解器。它遍历一个列表,当它找到“0”(一个空单元格)时,它会得到适合的数字并尝试它们:

对于某些谜题,这是可行的,例如这个:

花了不到一秒钟,但是这个:

我还没有看到完成。我不认为这是该方法的问题,因为它确实返回了正确的结果。

分析表明大部分时间都花在了“isValid”函数上。该功能是否存在明显低效/缓慢的问题?

0 投票
5 回答
3320 浏览

java - 如何循环通过数独板?

例如,假设我们有一个这样的数独板:

我想将它存储到一个数组中,这样数组的前 9 个元素是第一个子块,即值{0 0 6 0 5 0 7 0 9},然后是{5 8 9 0 0 0 0 6 0}.

我试过找到一个解决方案,但我总是得到一个数组索引超出范围的错误,而且它太暴力了。与此类似的东西:

请给我一些提示。代码片段也会有很大帮助。

编辑:这个线程以某种方式帮助我弄清楚了。是的,这是数独的一部分,我试图将板编码成一个数组。

我所做的是首先将输入字符串转换为二维数组(9x9)并用于int block = (row/3)*3 + (col/3);准确计算每个元素所属的子块。

0 投票
3 回答
1445 浏览

android - 应用程序停止并显示“不幸的是 Soduku 已停止”之类的消息

我对 Android 完全陌生。我正在使用这本书你好,Android。我为“关于”创建了一个按钮,用于显示有关数独游戏的信息。但只要我点击它,应用程序就会停止说“不幸的是数独已停止”。

02-22 09:27:27.693: E/AndroidRuntime(554): 致命异常: main 02-22 09:27:27.693: E/AndroidRuntime(554): java.lang.RuntimeException: 无法启动活动 ComponentInfo{org. example.sudoku/org.example.sudoku.About}:android.view.InflateException:二进制 XML 文件第 2 行:膨胀类滚动视图时出错 02-22 09:27:27.693:E/AndroidRuntime(554):在 android.app .ActivityThread.performLaunchActivity(ActivityThread.java:1956) 02-22 09:27:27.693: E/AndroidRuntime(554): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 02-22 09:27:27.693 : E/AndroidRuntime(554): 在 android.app.ActivityThread.access$600(ActivityThread.java:123) 02-22 09:27:27.693: E/AndroidRuntime(554): 在 android.app.ActivityThread$H.handleMessage (ActivityThread.java:1147) 02-22 09:27:27.693: E/AndroidRuntime(554): 在 android.os.Handler。dispatchMessage(Handler.java:99) 02-22 09:27:27.693: E/AndroidRuntime(554): 在 android.os.Looper.loop(Looper.java:137) 02-22 09:27:27.693: E/ AndroidRuntime(554): 在 android.app.ActivityThread.main(ActivityThread.java:4424) 02-22 09:27:27.693: E/AndroidRuntime(554): 在 java.lang.reflect.Method.invokeNative(Native Method) 02-22 09:27:27.693: E/AndroidRuntime(554): 在 java.lang.reflect.Method.invoke(Method.java:511) 02-22 09:27:27.693: E/AndroidRuntime(554): 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 02-22 09:27:27.693: E/AndroidRuntime(554): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:551) 02-22 09:27:27.693: E/AndroidRuntime(554): at dalvik.system.NativeStart.main(Native Method) 02-22 09:27:27.693: E/AndroidRuntime(554): Caused作者:android.view.InflateException:二进制 XML 文件第 2 行:膨胀类滚动视图时出错 02-22 09:27:27.693: E/AndroidRuntime(554): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:691) 02-22 09:27:27.693: E/AndroidRuntime(554) : 在 android.view.LayoutInflater.inflate(LayoutInflater.java:466) 02-22 09:27:27.693: E/AndroidRuntime(554): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:396) 02-22 09:27:27.693: E/AndroidRuntime(554): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:352) 02-22 09:27:27.693: E/AndroidRuntime(554): 在 com.android.internal .policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251) 02-22 09:27:27.693: E/AndroidRuntime(554): 在 android.app.Activity.setContentView(Activity.java:1835) 02-22 09 :27:27.693: E/AndroidRuntime(554): at org.example.sudoku.About.onCreate(About.java:9) 02-22 09:27:27.693: E/AndroidRuntime(554): at android.app。Activity.performCreate(Activity.java:4465) 02-22 09:27:27.693: E/AndroidRuntime(554): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 02-22 09:27:27.693: E/AndroidRuntime(554): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 02-22 09:27:27.693: E/AndroidRuntime(554): ... 11 更多 02-22 09:27: 27.693: E/AndroidRuntime(554): 由: java.lang.ClassNotFoundException: android.view.scrollview 02-22 09:27:27.693: E/AndroidRuntime(554): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader. java:61) 02-22 09:27:27.693: E/AndroidRuntime(554): 在 java.lang.ClassLoader.loadClass(ClassLoader.java:501) 02-22 09:27:27.693: E/AndroidRuntime(554) : 在 java.lang.ClassLoader.loadClass(ClassLoader.java:461) 02-22 09:27:27.693: E/AndroidRuntime(554): 在 android.view.LayoutInflater。createView(LayoutInflater.java:552) 02-22 09:27:27.693: E/AndroidRuntime(554): 在 android.view.LayoutInflater.onCreateView(LayoutInflater.java:636) 02-22 09:27:27.693: E/ AndroidRuntime(554): 在 com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66) 02-22 09:27:27.693: E/AndroidRuntime(554): 在 android.view.LayoutInflater.onCreateView (LayoutInflater.java:653) 02-22 09:27:27.693: E/AndroidRuntime(554): 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:678) 02-22 09:27:27.693: E/AndroidRuntime (554): ... 20 更多 02-22 09:30:52.675: E/AndroidRuntime(582): 致命异常: main 02-22 09:30:52.675: E/AndroidRuntime(582): java.lang.RuntimeException :无法启动活动 ComponentInfo{org.example.sudoku/org.example.sudoku.About}:android.view.InflateException:二进制 XML 文件第 2 行:膨胀类滚动视图时出错 02-22 09:30:52.675: E/AndroidRuntime(582): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 02-22 09:30:52.675: E/AndroidRuntime(582) : 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 02-22 09:30:52.675: E/AndroidRuntime(582): 在 android.app.ActivityThread.access$600(ActivityThread.java:123) 02- 22 09:30:52.675: E/AndroidRuntime(582): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 02-22 09:30:52.675: E/AndroidRuntime(582): 在 android. os.Handler.dispatchMessage(Handler.java:99) 02-22 09:30:52.675: E/AndroidRuntime(582): 在 android.os.Looper.loop(Looper.java:137) 02-22 09:30: 52.675: E/AndroidRuntime(582): 在 android.app.ActivityThread.main(ActivityThread.java:4424) 02-22 09:30:52.675: E/AndroidRuntime(582): 在 java.lang.reflect.Method。invokeNative(Native Method) 02-22 09:30:52.675: E/AndroidRuntime(582): at java.lang.reflect.Method.invoke(Method.java:511) 02-22 09:30:52.675: E/AndroidRuntime (582): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 02-22 09:30:52.675: E/AndroidRuntime(582): 在 com.android.internal.os。 ZygoteInit.main(ZygoteInit.java:551) 02-22 09:30:52.675: E/AndroidRuntime(582): at dalvik.system.NativeStart.main(Native Method) 02-22 09:30:52.675: E/AndroidRuntime (582):原因:android.view.InflateException:二进制 XML 文件第 2 行:膨胀类滚动视图时出错 02-22 09:30:52.675:E/AndroidRuntime(582):在 android.view.LayoutInflater.createViewFromTag(LayoutInflater .java:691) 02-22 09:30:52.675: E/AndroidRuntime(582): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:466) 02-22 09:30:52.675: E/AndroidRuntime(582 ):在 android.view.LayoutInflater.inflate(LayoutInflater.java:396) 02-22 09:30:52.675: E/AndroidRuntime(582): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:352) 02-22 09 :30:52.675: E/AndroidRuntime(582): 在 com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251) 02-22 09:30:52.675: E/AndroidRuntime(582): 在android.app.Activity.setContentView(Activity.java:1835) 02-22 09:30:52.675: E/AndroidRuntime(582): at org.example.sudoku.About.onCreate(About.java:9) 02-22 09:30:52.675: E/AndroidRuntime(582): 在 android.app.Activity.performCreate(Activity.java:4465) 02-22 09:30:52.675: E/AndroidRuntime(582): 在 android.app.Instrumentation .callActivityOnCreate(Instrumentation.java:1049) 02-22 09:30:52.675: E/AndroidRuntime(582): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 02-22 09:30:52.675:E/AndroidRuntime(582): ... 11 more 02-22 09:30:52.675: E/AndroidRuntime(582): Caused by: java.lang.ClassNotFoundException: android.view.scrollview 02-22 09:30:52.675 : E/AndroidRuntime(582): 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 02-22 09:30:52.675: E/AndroidRuntime(582): 在 java.lang.ClassLoader.loadClass(ClassLoader. java:501) 02-22 09:30:52.675: E/AndroidRuntime(582): 在 java.lang.ClassLoader.loadClass(ClassLoader.java:461) 02-22 09:30:52.675: E/AndroidRuntime(582) : 在 android.view.LayoutInflater.createView(LayoutInflater.java:552) 02-22 09:30:52.675: E/AndroidRuntime(582): 在 android.view.LayoutInflater.onCreateView(LayoutInflater.java:636) 02-22 09:30:52.675: E/AndroidRuntime(582): 在 com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66) 02-22 09:30:52.675:E/AndroidRuntime(582): 在 android.view.LayoutInflater.onCreateView(LayoutInflater.java:653) 02-22 09:30:52.675: E/AndroidRuntime(582): 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java :678) 02-22 09:30:52.675: E/AndroidRuntime(582): ... 20 更多 02-22 09:35:04.594: E/AndroidRuntime(596): 致命例外:主要 02-22 09:35 :04.594:E/AndroidRuntime(596):java.lang.RuntimeException:无法启动活动 ComponentInfo{org.example.sudoku/org.example.sudoku.About}:android.view.InflateException:二进制 XML 文件第 2 行:膨胀类滚动视图时出错 02-22 09:35:04.594: E/AndroidRuntime(596): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 02-22 09:35:04.594: E/AndroidRuntime(596) : 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 02-22 09:35:04.594: E/AndroidRuntime(596):在 android.app.ActivityThread.access$600(ActivityThread.java:123) 02-22 09:35:04.594: E/AndroidRuntime(596): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 02 -22 09:35:04.594: E/AndroidRuntime(596): 在 android.os.Handler.dispatchMessage(Handler.java:99) 02-22 09:35:04.594: E/AndroidRuntime(596): 在 android.os .Looper.loop(Looper.java:137) 02-22 09:35:04.594: E/AndroidRuntime(596): 在 android.app.ActivityThread.main(ActivityThread.java:4424) 02-22 09:35:04.594 : E/AndroidRuntime(596): at java.lang.reflect.Method.invokeNative(Native Method) 02-22 09:35:04.594: E/AndroidRuntime(596): at java.lang.reflect.Method.invoke(Method .java:511) 02-22 09:35:04.594: E/AndroidRuntime(596): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 02-22 09:35:04.594 : E/AndroidRuntime(596): 在 com.android.internal.os。ZygoteInit.main(ZygoteInit.java:551) 02-22 09:35:04.594: E/AndroidRuntime(596): at dalvik.system.NativeStart.main(Native Method) 02-22 09:35:04.594: E/AndroidRuntime (596):引起:android.view.InflateException:二进制 XML 文件第 2 行:膨胀类滚动视图时出错 02-22 09:35:04.594:E/AndroidRuntime(596):在 android.view.LayoutInflater.createViewFromTag(LayoutInflater .java:691) 02-22 09:35:04.594: E/AndroidRuntime(596): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:466) 02-22 09:35:04.594: E/AndroidRuntime(596 ): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:396) 02-22 09:35:04.594: E/AndroidRuntime(596): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:352) 02- 22 09:35:04.594: E/AndroidRuntime(596): 在 com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251) 02-22 09:35:04.594:E/AndroidRuntime(596): 在 android.app.Activity.setContentView(Activity.java:1835) 02-22 09:35:04.594: E/AndroidRuntime(596): 在 org.example.sudoku.About.onCreate(关于.java:9) 02-22 09:35:04.594: E/AndroidRuntime(596): 在 android.app.Activity.performCreate(Activity.java:4465) 02-22 09:35:04.594: E/AndroidRuntime(596 ): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 02-22 09:35:04.594: E/AndroidRuntime(596): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 02- 22 09:35:04.594: E/AndroidRuntime(596): ... 11 更多 02-22 09:35:04.594: E/AndroidRuntime(596): 由: java.lang.ClassNotFoundException: android.view.scrollview 02 -22 09:35:04.594:E/AndroidRuntime(596):在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 02-22 09:35:04.594:E/AndroidRuntime(596):在 java。lang.ClassLoader.loadClass(ClassLoader.java:501) 02-22 09:35:04.594: E/AndroidRuntime(596): at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 02-22 09:35: 04.594: E/AndroidRuntime(596): 在 android.view.LayoutInflater.createView(LayoutInflater.java:552) 02-22 09:35:04.594: E/AndroidRuntime(596): 在 android.view.LayoutInflater.onCreateView(LayoutInflater .java:636) 02-22 09:35:04.594: E/AndroidRuntime(596): 在 com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66) 02-22 09:35:04.594 : E/AndroidRuntime(596): 在 android.view.LayoutInflater.onCreateView(LayoutInflater.java:653) 02-22 09:35:04.594: E/AndroidRuntime(596): 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater. java:678) 02-22 09:35:04.594: E/AndroidRuntime(596): ... 20 更多 02-22 09:43:32.034: E/AndroidRuntime(610): 致命异常:主要 02-22 09:43:32.034: E/AndroidRuntime(610): java.lang.RuntimeException: 无法启动活动 ComponentInfo{org.example.sudoku/org.example.sudoku.About}: android.view.InflateException:二进制 XML 文件第 2 行:膨胀类滚动视图时出错 02-22 09:43:32.034: E/AndroidRuntime(610): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 02-22 09:43:32.034 : E/AndroidRuntime(610): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 02-22 09:43:32.034: E/AndroidRuntime(610): 在 android.app.ActivityThread.access$600(ActivityThread .java:123) 02-22 09:43:32.034: E/AndroidRuntime(610): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 02-22 09:43:32.034: E/AndroidRuntime (610): 在 android.os.Handler.dispatchMessage(Handler.java:99) 02-22 09:43:32.034: E/AndroidRuntime(610):在 android.os.Looper.loop(Looper.java:137) 02-22 09:43:32.034: E/AndroidRuntime(610): 在 android.app.ActivityThread.main(ActivityThread.java:4424) 02-22 09 :43:32.034: E/AndroidRuntime(610): 在 java.lang.reflect.Method.invokeNative(Native Method) 02-22 09:43:32.034: E/AndroidRuntime(610): 在 java.lang.reflect.Method .invoke(Method.java:511) 02-22 09:43:32.034: E/AndroidRuntime(610): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 02-22 09 :43:32.034: E/AndroidRuntime(610): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 02-22 09:43:32.034: E/AndroidRuntime(610): 在 dalvik。 system.NativeStart.main(Native Method) 02-22 09:43:32.034: E/AndroidRuntime(610): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class scrollview 02-22 09: 43:32.034:E/Android 运行时(610):在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:691) 02-22 09:43:32.034: E/AndroidRuntime(610): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:466) 02-22 09 :43:32.034: E/AndroidRuntime(610): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:396) 02-22 09:43:32.034: E/AndroidRuntime(610): 在 android.view.LayoutInflater。膨胀(LayoutInflater.java:352)02-22 09:43:32.034:E/AndroidRuntime(610):在 com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251)02-22 09: 43:32.034: E/AndroidRuntime(610): 在 android.app.Activity.setContentView(Activity.java:1835) 02-22 09:43:32.034: E/AndroidRuntime(610): 在 org.example.sudoku.About .onCreate(About.java:9) 02-22 09:43:32.034: E/AndroidRuntime(610): 在 android.app.Activity.performCreate(Activity.java:4465) 02-22 09:43:32.034:E/AndroidRuntime(610): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 02-22 09:43:32.034: E/AndroidRuntime(610): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java :1920) 02-22 09:43:32.034: E/AndroidRuntime(610): ... 11 更多 02-22 09:43:32.034: E/AndroidRuntime(610): 引起:java.lang.ClassNotFoundException: android .view.scrollview 02-22 09:43:32.034: E/AndroidRuntime(610): 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) 02-22 09:43:32.034: E/AndroidRuntime(610) : 在 java.lang.ClassLoader.loadClass(ClassLoader.java:501) 02-22 09:43:32.034: E/AndroidRuntime(610): 在 java.lang.ClassLoader.loadClass(ClassLoader.java:461) 02-22 09:43:32.034: E/AndroidRuntime(610): 在 android.view.LayoutInflater.createView(LayoutInflater.java:552) 02-22 09:43:32.034: E/AndroidRuntime(610):在 android.view.LayoutInflater.onCreateView(LayoutInflater.java:636) 02-22 09:43:32.034: E/AndroidRuntime(610): 在 com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java: 66) 02-22 09:43:32.034: E/AndroidRuntime(610): 在 android.view.LayoutInflater.onCreateView(LayoutInflater.java:653) 02-22 09:43:32.034: E/AndroidRuntime(610): 在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:678) 02-22 09:43:32.034: E/AndroidRuntime(610): ... 20 更多在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:678) 02-22 09:43:32.034: E/AndroidRuntime(610): ... 20 更多在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:678) 02-22 09:43:32.034: E/AndroidRuntime(610): ... 20 更多

0 投票
6 回答
17808 浏览

java - Java中的数独求解器,使用回溯和递归

我正在用 Java 为 9x9 网格编写数独求解器。

我有以下方法:

  • 打印网格

  • 用给定的值初始化电路板

  • 测试冲突(如果相同的数字在同一行或 3x3 子网格中)

  • 一种逐个放置数字的方法,这需要最多的工作。

在我详细介绍该方法之前,请记住,我必须使用递归来解决它,以及回溯(以此处的小程序为例http://www.heimetli.ch/ffh/simplifiedsudoku.html

另外,我通过垂直向下移动来解决这个数独,从左上角开始,通过第一列,然后通过第二列,等等。

到目前为止,我有以下内容:

我标记 BACKTRACKING 的地方是我认为我的代码的其余部分需要去的地方。

我想到了一些类似的东西:

  • 如果值为 10,则将该值设置回零,返回一行,然后将该值增加 1

由于以下几个原因,这种回溯“策略”并不完全奏效:

  1. 如果前一行是一个给定的值怎么办(也就是我不应该增加或触摸它,而是回到我放在那里的最后一个值)

  2. 如果之前的值是 9 怎么办?如果我将它增加 1,现在我们是 10,这将不起作用。

有人可以帮我吗?

0 投票
2 回答
1377 浏览

java - 数独递归在回溯时出现问题。(蛮力)

可能重复:
Java中的数独求解器,使用回溯和递归

我正在创建一个使用递归和蛮力解决数独的程序。我的关键问题是我不明白我怎么能想象到它会被卡住。

该程序的一般算法如下:

  1. 找出数独中零的数量。

  2. 在第一个 0 的位置(getNextEmpty 方法执行此操作),插入一个数字(insertnumber 检查以确保值符合数独规则,如果符合则返回 true)。

  3. 然后我进行递归调用,当不再有零时结束(n 是零的数量)。

  4. 如果程序到了卡住的地步,我必须回溯改变一块。但这怎么可能?

Cell 类实际上将要调整的单元格的位置保存在 [row, column] 格式的数组中。它具有返回与该单元格关联的行、列或更小的网格的方法。

我不是要求手持或所有代码,只要朝着正确的方向轻推就足够了,因为我对理解递归很感兴趣。

0 投票
0 回答
508 浏览

c# - LINQ 对角数独填充

我有一个数独发生器。我的算法是:

  1. 用数字填充整个数独网格以形成有效的填充 9x9 网格。
  2. 删除一定数量的数字。
  3. 检查是否可以解决。
  4. 通过实施人类解决技术来解决它,并根据所用技术的难度对难度进行评分。

问题出在步骤 1。我的蛮力算法非常适用于常规数独,但是当我尝试制作对角数独时(网格中的两个对角线中的每一个也需要有唯一的数字),生成时间会增加到几分钟。这是无法接受的。

所以我发现一个好的解决方案是使用 linq 填充网格。

我的想法是:

  1. 收集所有可能的单元格和值(81 个位置,每个位置有 9 个可能的值)。
  2. 现在创建某种查询,如下所示:

    • 从所有可能的单元格中,每个位置必须只出现一次(例如,单元格 0,0 一次,单元格 1,1 一次)。
    • 每个单元格值 (1-9) 在其行、单元格和正方形中必须是唯一的(如果单元格在对角线上,则为对角线)
    • 每次返回的组合必须是随机的

我确信有更好的解决方案,但我还没有看到任何解决方案。我的 linq 技能相当有限,所以我将非常感谢您指出正确的方向。谢谢你。