关于生成数独代码的问题

请问在您的生成数独的代码,it值是什么?当行列为16时怎么设定?

以下答案引用自GPT-3大模型,请合理使用:

it值是指迭代的次数,一般以“8-12”次迭代即可得出合乎逻辑且不重复的数独结果。

一般来说,当行列为16时,需要对迭代次数做出相应的调整。一般建议在20-25次迭代左右使用。

参考代码:

#include <iostream> 
#include <cstdlib> 
#include <ctime> 
#include <vector> 

using namespace std; 

const int size = 16; // 行列大小

//生成数独 
void generateSudoku(int[size][size]);

//打印数独 
void printSudoku(int[size][size]);

int main() {
  //初始化随机种子
    srand((unsigned)time(NULL));

    int sudoku[size][size];

    generateSudoku(sudoku); 
  printSudoku(sudoku); 
  return 0;
}

void generateSudoku(int sudoku[size][size]) {
  // 随机生成数独
  for (int it = 0; it < 20; it++) {
    int row = rand() % 16; 
    int col = rand() % 16;
    int num = rand() % 16 + 1;
    //如果该位置已经有设定好的值,则跳过
    if (sudoku[row][col] != 0) continue;
    // 检查是否会有冲突
    bool ok = true; 
    for (int i = 0; i < size; i++) {
      if (sudoku[row][i] == num || sudoku[i][col] == num) { 
        ok = false; break;
      }
    }
    if (ok) {
      sudoku[row][col] = num;
    }
  }
}

void printSudoku(int sudoku[size][size]) {
  for (int i = 0; i < size; i++) {
    for (int j = 0; j < size; j++) { 
      cout<<sudoku[i][j] << " ";
    }
    cout<<endl;
  }
}

如果我的回答解决了您的问题,请采纳我的回答

it是指迭代的次数。在数独生成的过程中,每次迭代都会随机选择一个格子并尝试填充数字,如果填充的数字与行、列和九宫格中已有的数字不冲突,则继续填充下一个格子,否则重新选择另一个数字填充,直到所有格子都填充完毕。因此,it值代表的是这个迭代过程的次数。

当行列为16时,我们需要对生成数独的算法做出相应的修改。具体来说,我们需要将每个格子的可选数字从1-9改为1-16,同时将九宫格的大小从3x3改为4x4。在我的代码中,这个修改可以通过修改self.__numbers和self.__box_size这两个变量来实现。例如,我们可以将self.__numbers设置为list(range(1, 17)),将self.__box_size设置为4,以适应16x16的数独。然后就可以运行代码来生成16x16的数独了。

it是随机生成一行的最大尝试次数,用于结束循环,原因是有可能无论如何随机,生成的那一行数与之前的数据必定冲突,这时候就需要强制跳出循环,从头开始新一轮的尝试;
经尝试,若数据规模为16,很难随机出符合各种条件的数据,跟it值的设置关系不大,可能得另寻算法、另辟蹊径。