问题标签 [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.
c# - 如果 volatile 不是一个好主意,则 C# 替代锁定
很抱歉,我知道这个话题已经死了(我已经读过我已经读过这个和这个以及更多)但是我有一个问题,我不确定如何“正确”地做。
目前我的多线程数独策略代码如下:
(是的,我已经使用和不使用递归进行了 DFS,并使用了上述策略所修改的 BFS)
我想知道是否允许我将我的更改private bool _solved;
为 aprivate volatile solved;
并摆脱访问器。我认为这可能是一件坏事,因为我的ProcessQueue()
方法改变了_solved
我是否正确的状态?我知道布尔值是原子的,但我不希望编译器优化弄乱我的读/写语句的顺序(尤其是因为写只发生一次)。
基本上 lock 语句增加了这个策略的运行时间几十秒。没有锁,它的运行速度要快得多(尽管由于内存分配与 DFS 相比相对较慢currentNode.GenerateChildrenAndRecordSudoku()
algorithm - 数独问题的产生
我正在做数独游戏。我的问题是数独问题的产生。我想在三个困难中提出问题。有什么想法可以生成 3 个级别的问题吗?
java - 我的随机数独生成器一直停转
对于我的编程课程,我决定在 GUI 中创建一个数独板。我为板子的代码创建了一个类,每当需要填充的插槽无法填充任何东西时,板子就会停止,我似乎无法让它重新启动。有什么帮助吗?是什么导致它停滞不前?如何让它重新启动?
到目前为止我的代码:
java - 递归数独求解器在 Java 中不起作用
我用 C 语言编写了一个包含求解器的数独游戏,并想在 Java 中试用它,以便人们可以更轻松地使用它(可移植性)。由于语言之间的巨大相似性,我认为移植会相当简单,但似乎有点痛苦。
我的求解器无限递归,这在 C 中从未发生过。这是我用于解决难题的原始 C 函数:
我知道这不一定是最快或最好的书面求解器,但它确实有效。它只是找到具有最少可能值的图块,然后从一个随机值开始并尝试所有可能的值,直到一个可解决的难题(使用递归)。sudoku_get_mask 返回一个整数,前 9 位设置为对应的值。它检查水平、垂直和子方块中已经使用的值,并将它们从掩码中删除。
现在,这里是 Java 端口:
它们几乎相同,所以我无法弄清楚为什么 Java 端口会无限递归!求解器应该始终要么 1. 找到解决方案,要么 2. 找到没有解决方案。按照我的逻辑,我看不到它应该无限递归的方式。
这是 GetMask Java 代码:
这是 squareIndex 和 squarePoint(只是查找子方块的表):
objective-c - 适用于 iOS 数独抓取器的 OpenCV
我正在关注本教程 http://aishack.in/tutorials/sudoku-grabber-with-opencv-detection/ 但它不适用于 iOS。可以使用那里描述的一些方法,但 Floodfill(用作 cvFloodFill)不再是 int。这是一个空白
我正在尝试获得最大 blob 的大小,这几乎是我缺少的部分。这个for循环和floodfill。
有什么好的方法吗?
我想到了 cvBlob 库,但我无法让它为 mac 编译..尝试了很多方法....
编辑:在arkiaz的回答之后,转移到一个新问题:
谢谢!
objective-c - OpenCV cvFindContours 问题
我正在关注本指南:http ://www.aishack.in/2010/08/sudoku-grabber-with-opencv/2/ 并修改为 iOS 5.0。
我设法找到了最大的轮廓(数独“板”),但是,它只定位周围的正方形,没有内部的线条,如教程中所示。这很容易解决吗?
我会尝试找到解决方法,但仍然想知道。谢谢!
algorithm - 数独生成器算法
我做了一个算法来生成数独,但它的效率非常低。每个谜题都需要几分钟才能生成。所以现在我正在尝试以最佳方式再次编写它。但是我遇到了一些需要帮助的问题。
有两种方法:
- 从空白网格开始并添加数字,然后检查它是否可以解决。
- 创建包含所有 81 个数字的完整有效网格,然后删除,直到我们对剩余数字的数量感到满意并且它仍然可以解决。
首先我使用第一种方法,但现在我将使用第二种方法,因为我认为它更有效(我们从保证可解决的有效难题开始)。我是对的,第二种方法更好?
当我试图生成完整的填充网格时,我遇到了困难。我的算法是:
- 为每个单元格设置候选者。最初它们是数字 1 到 9。
- 选择没有值的随机单元格。
- 从该单元格中选择随机候选并将其分配为单元格值。其他候选人被丢弃。
- 现在对于与分配的单元格对应的每一行、单元格和正方形,我从这些候选者中删除单元格的值,因此每个数字在行/列/正方形中都是唯一的
- 重复
这种技术保证随机网格没有重复的数字。然而,大多数时候,当我不违反任何放置规则时,就会发生冲突——比如所有候选人都被删除的空单元格等,我需要重新开始。有没有更优雅/有效的方法来用数字填充整个网格而不破坏放置规则和仍然是随机数?
java - 计算已完成数独板的行和列
所以我试图计算一个完整的数独板的输入文件有多少行和列。我想出了这个循环
我从以前的方法中得到了制作这种方法的想法,在该方法中我读取并创建了数独板输入文件的数组。我认为这两种方法会相似,但它们不是.. nrws 和 ncolumns 的输出是 1 和 81。所以有人可以帮我找出正确的方法来计算列以确保有 9 个。或者它会最好开始比较行和列的值,以查看是否有任何重复项(1-9)在使用该错误检查以查看是否有正确的行数和列数?
java - 比较二维数组的行和列的整数。数独
嘿,我无法让我的代码比较给定行或列的整数并阻止以确保这些参数中没有重复项。我不知道用 3 种不同的方法分离这三个约束是否是一个好主意,或者只是尝试一次做所有事情。
这是我开始的代码。在你们抨击我什至无法编译这个之前,我坚持如何比较二维数组的一行的所有值。
java - 数独检查器 2d 数组 Java
所以我的代码有点问题。假设要交叉检查相同整数的行和列。
这是我到目前为止所拥有的......但是当我运行它时,它似乎只检查第一个整数。(例如数独板的第一行读取。1 2 2 2 2 2 2 2 2 2)它不会检测到明显的倍数 2 但如果我将输入更改为 1 1 2 2 2 2 2 2 2 错误将会出现在这种情况下最多为多个 1。多个任何建议来调整我的循环以使其通过列?