1

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

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

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

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

我的想法是:

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

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

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

4

0 回答 0