问题标签 [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 回答
59173 浏览

java - Java Sudoku Generator(最简单的解决方案)

在我在这里看到的最后一个问题中: 数独 - 区域测试 我问如何检查 3x3 区域并且有人能够给我一个令人满意的答案(尽管它涉及到很多修补才能让它按照我想要的方式工作,因为他们没有'没有提到 table_t 类是什么。)

我完成了这个项目并且能够创建一个数独生成器,但感觉就像是做作的。而且我觉得我采取了一种非常蛮力的方法来生成谜题,从而使事情变得过于复杂。

本质上,我的目标是创建一个 9x9 网格,其中包含 9-3x3 区域。每行/列/区域只能使用数字 1-9 一次。

我解决这个问题的方法是使用二维数组随机放置数字,一次 3 行。一旦 3 行完成,它将检查 3 行、3 个区域和每个垂直列直到第 3 个位置。当它遍历它时,它会做同样的事情,直到数组被填充,但由于我用 rand 填充,并且多次检查每一行/列/区域,感觉非常低效。

除了二维数组之外,是否有一种“更简单”的方法可以使用任何类型的数据构造来执行此操作?有没有一种更简单的方法来检查每个 3x3 区域,这可能与更好地检查垂直或水平一致?从计算的角度来看,我看不出有太多方法可以在不显着增加代码大小的情况下更有效地完成它。

0 投票
4 回答
6054 浏览

sudoku - 是否有任何算法可以解决任何传统的数独难题,而无需猜测(或类似技术)?

是否有任何算法可以解决任何传统的数独难题,无需猜测?

这里的猜测是指尝试一个候选者,看看它走了多远,如果发现与猜测相矛盾,则回溯到猜测步骤并尝试另一个候选者;当所有候选人都用尽而没有成功时,回溯到上一个猜测步骤(如果有;否则拼图证明无效。)等。

EDIT1:感谢您的回复。

传统数独是指 81 盒数独,没有任何其他限制。让我们说我们知道解决方案是唯一的,是否有任何算法可以保证在不回溯的情况下解决它?回溯是一种通用工具,我没有错,但是使用通用工具解决数独会降低(手动或通过计算机)数独谜题的价值和乐趣。

人类如何解决所谓的“世界上最难的数独”,他需要猜测吗?

我听说一些研究人员偶然发现他们的一些数据分析算法可以解决所有数独问题。这是真的吗,他们也必须猜测吗?

0 投票
6 回答
11172 浏览

c++ - 数独回溯算法

首先,我要声明这是一项大学作业,所以我不是要求有人为我编写代码,我只需要指出正确的方向。:)

好的,所以我需要编写一个算法来解决任意大小的任何(可解决的)数独板。我编写了一个递归函数,可以快速解决任何 9x9 板(约 1 毫秒),但是当我做较大的板(16x16)时,很难解决它。我已经进行了 20 分钟的测试,它可以' t似乎解决它。它可以解决简单的 16x16 难题,甚至可以解决空白的 16x16 板,所以我认为问题不是尺寸问题。我认为问题更可能是算法。

无论如何,这是我程序的基本逻辑..

  • 我有一个 3D 向量来存储我的每个正方形的可能值
  • 当一个值放在一个正方形中时,它会从它所在的周围正方形、行和列的可能值中删除

那么我的求解功能基本上是:

这有什么低效的吗?有什么办法可以让它更好地工作吗?我猜一个 16x16 的板需要这么长时间是因为它的决策树对于一个没有太多填充的板来说太大了。不过这很奇怪,因为 9x9 板会很快解决。

任何想法或建议都会非常棒。如果有任何我错过的信息,也请告诉我!

0 投票
2 回答
207 浏览

java - 获取 StackOverflow 错误

我正在尝试编写一个程序来解决数独难题。但是,我在这一行遇到了 StackOverflow 错误:

它有一个 isLegal 方法来检查移动是否有效。如果移动有效并且下一个移动也有效,则将其添加到堆栈中。如果它是有效的但下一步不是,它应该继续搜索一个有效的数字。不确定是什么原因造成的。

0 投票
1 回答
461 浏览

c++ - 我的数独求解器功能有什么问题?

好的,所以我将我的功能更改为回溯功能(我在网上找到的)。它仍然从文件中读取并将其输入到数组中,检查功能正常工作,所以我没有改变它。如果您想知道以下是我要解决的难题(零是空格)。

0 投票
2 回答
772 浏览

c++ - C++:数独(抄板)

我是 C++ 新手,在做作业(数独)时遇到问题。

指令说:“你必须创建一个新的板作为当前板的副本(使用复制构造函数并从堆中分配板与新的)。”

我试过(它写在board.cc中):

收到错误消息:

我也试过:

这在comp时没有问题。但它在运行时也不起作用。

怎么做?这里真的需要帮助,谢谢!

这是board.h的一些代码:

完整的说明可以在这里找到: http ://www.kth.se/polopoly_fs/1.136980!/Menu/general/column-content/attachment/2-2.pdf

代码:http ://www.kth.se/polopoly_fs/1.136981!/Menu/general/column-content/attachment/2-2.zip

0 投票
2 回答
1379 浏览

c++ - C++ - 解决数独游戏

我是 C++ 新手,必须做一个家庭作业(数独)。我被困在一个问题上。

问题是要实现解决数独的搜索功能。

说明:为了找到解决方案,递归搜索使用如下。假设有一个尚未分配的带有数字的字段 (d1....dn) (n > 1)。然后我们首先尝试将字段分配给 d1,执行传播,然后继续递归搜索。可能发生的是传播导致失败(字段变为空)。在这种情况下,搜索失败,需要为其中一个字段尝试不同的数字。由于搜索是递归的,因此会尝试最后考虑的字段的下一个数字。如果没有一个数字导致解决方案,则搜索再次失败。这反过来又会导致尝试与前一个字段不同的数字,依此类推。

在通过为其分配字段来尝试数字 d 之前,您必须创建一个新板作为当前板的副本(使用复制构造函数并使用 new 从堆中分配板)。然后才对副本执行分配。如果对搜索的递归调用返回失败,则可以为下一个要尝试的数字创建一个新板。

我试过了:

另一个问题是在哪里使用递归调用?有小费吗?谢谢!

完整的说明可以在这里找到:http ://www.kth.se/polopoly_fs/1.136980!/Menu/general/column-content/attachment/2-2.pdf

代码:http ://www.kth.se/polopoly_fs/1.136981!/Menu/general/column-content/attachment/2-2.zip

0 投票
2 回答
1739 浏览

c# - 用哪种数据结构来表示数独谜题,通过找裸单/隐藏单来解决

我犹豫应该使用以下两种数据结构中的哪一种来表示数独板,以便通过使用裸单隐藏单技术来解决它。

1.

这样,我们可以通过检查candidates[row, col, n]是真还是假来检查单元格 (row,col) 是否包含候选 n

2.

这样,我们可以通过检查表达式row[r, n] && col[c, n] && square3x3[r/3 * 3 + c/3, n]是真还是假来检查单元格 (r,c) 是否包含候选 n

当某个单元格用数字 n 求解时,在第一种方式中,我们必须更新某个单元格的 row, col, square3x3 中所有 3x9 单元格的候选者,而在第二种方式中,我们只设置 row[,n] , col [,n] 和 square3x3[,n] 为真。

但我不确定哪种方式适合和有效地找到裸单和隐藏单。

任何人都可以建议我找到隐藏单的算法吗?

帮帮我,谢谢!

0 投票
3 回答
372 浏览

c++ - 这个 char 数组代码有什么问题?

我是 C++ 新手,只编程了几天,所以这可能看起来很愚蠢,但你能发现为什么我的数组不能正常工作吗?这是我正在设计的解决数独难题的程序的开始,但我用来解决它的二维数组无法正常工作。

}

另外我知道可能有更简单的方法来构建数独板,但我已经可以在脑海中看到这个是如何工作的,如果它失败了,那么学习的唯一方法就是失败。我只想知道数组有什么问题。

0 投票
1 回答
471 浏览

javascript - Javascript数独代码有时会挂起

我有一种感觉,我在我的头上。我正在尝试编写一个 javascript 数独游戏。这里没有发布我的所有代码,而是我的游戏的链接。我的来源在这里现在,它只是(试图)吐出解决方案网格。我的问题是,代码有时会无限期挂起。其他时候,它会在 Firefox 中在一秒钟内成功创建一个网格。谢谢你的帮助!