我有一个数独发生器。我的算法是:
- 用数字填充整个数独网格以形成有效的填充 9x9 网格。
- 删除一定数量的数字。
- 检查是否可以解决。
- 通过实施人类解决技术来解决它,并根据所用技术的难度对难度进行评分。
问题出在步骤 1。我的蛮力算法非常适用于常规数独,但是当我尝试制作对角数独时(网格中的两个对角线中的每一个也需要有唯一的数字),生成时间会增加到几分钟。这是无法接受的。
所以我发现一个好的解决方案是使用 linq 填充网格。
我的想法是:
- 收集所有可能的单元格和值(81 个位置,每个位置有 9 个可能的值)。
现在创建某种查询,如下所示:
- 从所有可能的单元格中,每个位置必须只出现一次(例如,单元格 0,0 一次,单元格 1,1 一次)。
- 每个单元格值 (1-9) 在其行、单元格和正方形中必须是唯一的(如果单元格在对角线上,则为对角线)
- 每次返回的组合必须是随机的
我确信有更好的解决方案,但我还没有看到任何解决方案。我的 linq 技能相当有限,所以我将非常感谢您指出正确的方向。谢谢你。