在c++中检查数独的有效性

Checking sudoku puzzle validity in c++

本文关键字:有效性 检查 c++      更新时间:2023-10-16

我正在编写一个程序,该程序接受一组数字三元组并创建一个数独谜题,使用每个三元组中的前两个数字索引2d数组,最后一个数字作为进入谜题的实际数字。程序的一部分是验证,以确保谜题中的每个数字在同一行、同列或同3x3块中没有重复。我已经写了代码来检查行和列,但我不确定如何去3x3块部分。我可以想到几种可行的方法(例如设置第三个数组维度并根据数组中的位置标记每个数字),但我能想到的一切都将是一个漫长而痛苦的过程。有没有我没想过的更简单的方法?

一个简单的方法,在伪代码中:

  • 对于每个3x3块(x, y ∈{0,3,6}):

    • 对于块内的每个单元格(x1, y1 ∈{0,1,2}):

      • 对于块内的其他单元格(x2, y2 ∈{0,1,2}):

        • 如果值at (x1, y1)等于值at (x2, y2),且x1 ≠X 2或y1 ≠2 y <子> :

          • 块无效

除非证明无效,否则块是有效的