独特的方法来生成数独谜题[复制](Unique methods to generate sudoku

2019-08-03 22:56发布

这个问题已经在这里有一个答案:

  • 如何生成独特的解决方案的数独板 9个回答

有多少可能的独特的方式,在那里产生一个数独谜题? 我能想到的只有两种可能的方式1)取一个解决数独谜题和洗牌的行和列2)生成一个随机数,并检查它是否违反了任何的数独的限制,重复直到数量不违反任何数独约束为每平方米(理论上可能的,但通常它会导致死锁)

是否有其他方法吗?

Answer 1:

这是一个20页的PDF,标题为“数独游戏生成:从易到邪恶”,那你可能会发现在你的追求是有用的。

要回答你的问题:

是否有其他方法吗?

是。 是有。



Answer 2:

简单的方法来产生高达采取解决Sudoko难题,步骤1)与I替换所有1与A,2与乙直到9,步骤2)做在使用的每个水平和垂直块块1和3之间的随机洗牌,在这里每个只能有3种可能的组合。 步骤3)现在洗牌块只能有3个垂直和3个水平洗牌步骤4)旋转块1〜4时间..步骤5)垂直镜像难题和水平使用1和步骤6之间2.随机)替换所有A与任何数量的1至9 ..

猜测这将产生约38093690880连击....



Answer 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;

}



文章来源: Unique methods to generate sudoku puzzle [duplicate]