이 코드는 해결 된 스도쿠 행렬을 생성해야하지만 while 문은 무한 루프에 넣습니다. while 문을 제거하면 나에게 99 또는 0 값이있는 행렬이 생깁니다. 그리고 난수 하나 하나를 유일하게 생성 할 수 없습니다. 코드를 실행하고 확인하려는 경우 항상 설명문을 제거하십시오.Sudoku 해결 매트릭스 while 문이 무한 루프를 제공합니다
int a[9][9];
int b[9][9];
int inputvalue(int x, int y, int value) //checks horizontally, vertically and 3*3matrix for conflicts
{
int i, j;
for (i = 0; i < 9; i++)
{
if (value == a[x][i] || value == a[i][y])
return 0;
}
for (i = (x/3) * 3; i <= ((x/3) * 3) + 2; i++)
{
for (j = (y/3) * 3; j <= ((y/3) * 3) + 2; j++)
if (b[i][j] == value)
return 0;
}
return value;
}
int main()
{
int i, j, k;
unsigned int s;
cout << "sudoku\n";
time_t t;
s = (unsigned) time(&t);
srand(s);
for (i = 0; i < 9; i++)
{
for (j = 0; j < 9; j++)
a[i][j] = 99;
}
for (i = 0; i < 9; i++)
{
for (j = 1; j <= 9; j++)//j is basically the value being given to cells in the matrix while k assigns the column no.
while(a[i][k]==99||a[i][k]==0)
{
k = rand() % 9;
a[i][k] = inputvalue(i, k, j);
}
}
for (i = 0; i < 9; i++)
{
for (j = 0; j < 9; j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
getch();
}
들여 쓰기를 초기화 할 수있는 일반적인 방법입니다. –
사이드 노트 : 알고리즘이 나에게 잘못되었습니다. 배열을 임의의 숫자로 채우려고합니다. 이전 선택이 호환되지 않는 경우 (예 : 후자의 선택을 취소 한 경우). 그러면 무한 루프로 다시 돌아올 거라고 생각합니다. 뒤로 추적하는 방법이 필요합니다 (즉, 잘못된 선택을 취소하십시오). 해결책이없는 스도쿠를 주면 어떻게되는지 생각해보십시오. – hivert