【发布时间】:2017-12-17 09:35:40
【问题描述】:
void generateSudoku(int sudoku[][C])
{
for (int i = 0; i < R; i++)
{
for (int j = 0; j < C; j++)
{
sudoku[i][j] = generateRandNum(); //generate random number for all 2d array
while (sudoku[1][0] == sudoku[0][0] || sudoku[2][0] == sudoku[1][0] || sudoku[2][0] == sudoku[0][0]
|| sudoku[3][0] == sudoku[2][0] || sudoku[3][0] == sudoku[1][0] || sudoku[3][0] == sudoku[0][0])
sudoku[i][j] = generateRandNum();
while ( sudoku[i][1] == sudoku[i][0] || sudoku[1][1] == sudoku[0][1] || sudoku[2][1] == sudoku[1][1]
|| sudoku[2][1] == sudoku[0][1] || sudoku[3][1] == sudoku[2][1] || sudoku[3][1] == sudoku[1][1]
|| sudoku[3][1] == sudoku[0][1]) //index 1 to index 0
sudoku[i][j] = generateRandNum();
while ( (sudoku[i][2] == sudoku[i][0]) || (sudoku[i][2] == sudoku[i][1]) || sudoku[1][2] == sudoku[0][2]
|| sudoku[2][2] == sudoku[1][2] || sudoku[2][2] == sudoku[0][2] || sudoku[3][2] == sudoku[2][2]
|| sudoku[3][2] == sudoku[1][2] || sudoku[3][2] == sudoku[0][2])
sudoku[i][j] = generateRandNum();
while ( (sudoku[i][3] == sudoku[i][0]) || (sudoku[i][3] == sudoku[i][1]) || (sudoku[i][3] == sudoku[i][2])) //index 3 to index 2,1,0
sudoku[i][j] = generateRandNum();
}
}
}
是否有更有效和更简单的方法来生成具有随机数的二维数组,这些随机数在每一列和每一行中都是不同的,就像数独一样?代码可以运行,但是执行时间太长,可能是循环太多造成的。另外我是初学者(一年级的 CS 学生),所以这是我能想到的让它与众不同的唯一方法(是的,我知道它愚蠢、低效和错误),因为我不知道如何做复杂的算法。
编辑:generateRandNum:
int generateRandNum()
{
int randNum;
randNum = (rand() % 4)+1;
return randNum;
}
【问题讨论】:
-
你能发布 generateRandNum 的正文吗?
-
发表在主帖
-
genRandNum 中的 for 循环是浪费时间,你为什么有它?该函数只返回一个数字,而不是全部 20
-
是的,你是对的,我忘了删除它
-
只检查第 i 行、第 j 列和第 i 行、第 j 列以及在一个条件下的所有内容,当您为 i、j 生成数字时,没有理由检查其他任何内容
标签: c++ arrays random distinct sudoku