有多少可能的独特方式来生成数独谜? 我只想到两种可能的方式 1)采取解决的数独谜题并洗牌行和列 2)生成一个随机数并检查它是否违反任何数独约束,重复直至数字不违反每个方格的任何数独约束(理论上可行,但通常会导致死锁)
还有其他方法吗?
答案 0 :(得分:21)
Here是一个长达20页的PDF,名为" Sudoku Puzzles Generating:from Easy to Evil",您可能会觉得在您的任务中有用。
回答你的问题:
还有其他方法吗?
是。是的。
答案 1 :(得分:-2)
生成解决Sudoko拼图的简单方法, 步骤1)用A替换所有1,用B替换B到9, 步骤2)使用1和3之间的随机在每个水平和垂直块块中进行随机播放,这里每个只能有3种可能的组合。 步骤3)现在洗牌块只能有3个垂直和3个水平洗牌 步骤4)将块旋转1到4次.. 步骤5)使用1和2之间的随机值垂直和水平地镜像拼图。 步骤6)将所有A替换为任何数字1到9 ..
猜测这会产生大约38,093,690,880个组合......
答案 2 :(得分:-3)
这样可行。
void genSudokuBoard(int grid[ ], int display[ ]){
int i,c, j, rowNum, colNum, blockNum;
for(c=0; c<N*N; c++) {
blockNum = colNum = 1;
//rowNum = c / N;
//colNum = c % N;
//blockNum = (rowNum / 3) * 3 + (colNum / 3);
for (j=0; j<N; j++)
printf("%d", grid[((blockNum/3)*N*3) + (colNum/3)*3 + (j/3)*N + j%3]);
}
printf("\n");
for(i=0; i<N*N; i++) { /* displaying all N*N numbers in the 'grid' array */
if(i%N==0 && i!=0) { /* printing a newline for every multiple of N */
printf("\n");
}
printf("%d ", grid[i]);
}
printf("\n");
return 0;
}