シミュレーション プロジェクト用にランダム数独パズルを生成する関数を作成しています。この関数は、生成するセルの数を引数として取り、セルのインデックスとそれらのセルに入れる数値を生成します。私はセル インデックスの生成に問題があります。私はプログラミングの専門家ではありません。インデックスを生成し、同じインデックス カップルにならないようにチェックアウトするための適切なルーチンが 2 回以上見つかりません。機能は次のとおりです。
void gen_puzzle(int quanti)
{
if(quanti>81) exit(1);
indexes* ij=new indexes[quanti];
int f,g,k, controllo=1;
do
{
for(f=0; f<9; f++)
for(g=0; g<9; g++)
{
puzzle[f][g].num=0;//puts 0 in the sudoku puzzle
puzzle[f][g].p=0;
}
//////////////section to improve
out:
srand(int(time(0)+clock()));
for(k=0; k<quanti; k++)
ij[k].i=casuale()-1, ij[k].j=casuale()-1;//generates random indexes of sudoku cells where put random nubers
for(f=0; f<quanti; f++)
for(g=f+1; g<quanti; g++)
{
if(ij[f].i==ij[g].i && (ij[f].j==ij[g].j)) goto out;
}
////////////////////
for(k=0; k<quanti; k++)
puzzle[ij[k].i][ij[k].j] . num=casuale();//puts random numbers in cells
}
while(dataNotGood()); //till sudoku isn't good
}
ij[]
関数がランダムなインデックスを配列に入れるセクションについて助けを求めgoto
ますquanti
。
casuale()
1 から 9 までの乱数を返すだけです。