을 간다, 이건 내 C++ 코드 :스도쿠 세대 : 그것은 루프
void generateSudoku(num sudoku[][N])
{ int i,j,k;
int vett[N],n,old;
//clean the sudoku matrix filling it with -1
for(i=0;i<N;i++)
for(j=0;j<N;j++)
sudoku[i][j].val=-1;
//generate the sudoku
for(i=0;i<N;){
for(j=0;j<N;){
k=0;
clean(vett,N); //fills the vector with -1
old=sudoku[i][j].val; //saves the actual value
do{
if(k<9){
do{
n=rand()%9+1;
}while(find(vett,N,n)); //generate n while it already exists in vett
vett[k++]=n;
if((!(exists(sudoku,i,j,n))) && (n!=old)){ //if it not exists on row, column and sub-matrix and it's different between the old value, it's OK
sudoku[i][j++].val=n;
if(j==N) i++;
k=10;
}
}
else{
sudoku[i][j].val=-1;
if(j>0) j--;
else if(i>0){
j=N-1;
i--;
}
k=10;
}
}while(k<=9);
}
}
}
그것은 루프에 간다 나는 이유를 알고
2 7 6 | 9 1 3 | 4 5 8
4 3 9 | 5 7 2 | * *
을
이 예제에서는 *가있는 곳에서 6-1과 1-6을 계속 생성하고 끝내지 않습니다. 그러나 그것이 왜 반복되는지를 이해하더라도, 나는 그것을 고치는 가장 좋은 방법을 모른다. 누군가 나를 도울 수 있습니까?
당신이 금지 된 값을 저장해야합니다, 여기 당신이 하나의 레벨을 역 추적 할 수 있습니다. – Jarod42
모든 금지 된 값을 가진 모든 값에 대해 배열을 사용한다고 생각했지만 제대로 작동하는지 확신 할 수 없습니다. 벡터를 청소해야합니까? – Vitto
3 행이 모두 채워질 때마다 청소할 수 있습니다. – Jarod42