数独パズルを生成する方法はいくつありますか? 私は2つの可能な方法しか考えられません 1)解決済みの数独パズルを取り、行と列をシャッフルします 2)乱数を生成して数独制約に違反していないかどうかを確認し、数がすべての数独制約に違反しなくなるまで繰り返します正方形(理論的には可能ですが、通常はデッドロックにつながります)独創的な方法でスードクパズルを生成する
他の方法はありますか?
数独パズルを生成する方法はいくつありますか? 私は2つの可能な方法しか考えられません 1)解決済みの数独パズルを取り、行と列をシャッフルします 2)乱数を生成して数独制約に違反していないかどうかを確認し、数がすべての数独制約に違反しなくなるまで繰り返します正方形(理論的には可能ですが、通常はデッドロックにつながります)独創的な方法でスードクパズルを生成する
他の方法はありますか?
Hereは20ページのPDFで、「簡単なものから悪いものまで」というタイトルのPDFで、おそらくあなたのクエストに役立つでしょう。あなたの質問に答えるために
:
は、他の方法はありますか?
はい。はい、あります。
これは機能します。 、 ステップ1を解決Sudokoパズルを取るまで生成する
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;
}
簡単な方法)I、 ステップ2で9までBをA、2とすべて1を置き換える)でシャッフルを行います1と3の間のランダムを使用する各水平および垂直ブロックブロックは、ここではそれぞれ3つの可能な組み合わせしか存在しない。 ステップ3)今度はブロックをシャッフルして、垂直シャープル3回、水平シャッフルシャッフル ステップ4)ブロック1〜4回を回転させます。 ステップ5)1と2の間のランダムを使用してパズルを垂直方向と水平方向にミラーリングします。 ステップ6)すべてのAを任意の1〜9の数字に置き換えます。
これは約38,093,690,880のコンボを生成すると推測します。