Tag: sudoku

用于创建数独板的暴力算法

我正在开发的是,最初整个数独板都是空的。 其中一个随机单元(81个中)填充了随机值(1-9)。 现在我想用蛮力方法填充所有剩余的细胞。 从我在谷歌搜索后得知的是,我们应该从第一个单元格开始并用1填充它(如果它有效),然后用2填充第二个单元格(如果它有效,我们将开始检查大于最后填充的单元格,在这种情况下为1,一旦达到9,我们将其重置为1)。 问题是它不能正常工作! 任何人都可以将我链接到确切的算法。

数独生成器算法

我做了一个生成sudokus的算法,但效率非常低。 每个难题都需要几分钟才能生成 所以现在我想以最佳方式再次编写它。 但我遇到了一些我需要帮助的问题。 有两个aproaches,从空白网格开始并添加数字,然后检查它是否可以解决。 第二种方法是创建包含所有81个数字的完整有效网格,然后删除,直到我们对剩余数字的数量感到满意并且它仍然可以解决。 首先我使用第一种方法,但现在我将使用第二种方法,因为我认为它更有效(我们从有效拼图开始,保证可以解决)。 我说第二种方法更好吗? 当我试图生成完全填充的网格时,我遇到了困难。 我的算法是: 为每个细胞设置候选者。 最初他们是数字1到9。 选择没有值的随机单元格。 从该单元格中选择随机候选项并将其指定为单元格值。 其他候选人被丢弃。 现在对于每一行,对应于指定单元格的单元格和正方形I从这些候选中移除单元格的值,因此每个数字在行/列/正方形中是唯一的 重复 此技术保证随机网格没有重复的数字。 但是,大多数情况下,当我没有违反任何放置规则时就会发生冲突 – 比如所有候选人都被移除的空单元格,我需要重新开始。 有没有更优雅/有效的方法用数字填充整个网格而不破坏放置规则和仍然是随机数? 谢谢。

C#中的数独算法

我需要一个衬里(或靠近它)来validation给定的9个元素的数组不包含重复的数字1,2,3,…,9。 重复零不计数(它们代表空单元格)。 到目前为止我得到的最好的是: var a = new int[9] {1,2,3,4,5,6,7,8,9}; var itIsOk = a.Join(a, i => i, j => j, (x, y) => x) .GroupBy(y => y).Where(g => g.Key > 0 && g.Count() > 1).Count() == 0; 如果你不想解决我的问题:),你至少可以告诉上述算法是否正常工作吗? 并且,是的,已经读过这个 。