此代码应生成已解决的数独矩阵,但while语句将其置于无限循环中。删除while语句给我一个矩阵,其中一些值仍为99或0.而且我不能一个一个地唯一生成9个随机数。 如果您想运行并检查代码,请删除声明。
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();
}
答案 0 :(得分:2)
您正在使用作业=
,而不是此处的等级==
:
while(a[i][k]=99||a[i][k]=0)
^ ^
这应该是:
while(a[i][k]==99||a[i][k]==0)
a[i][k]=99
将始终评估为true
,因为99
非零,尽管您的原始代码不会在gcc
下为我编译,因此我怀疑你运行的代码有一些括号或略有不同。
在初始化之前在while循环中使用k
是未定义的行为,并且不清楚您的终止逻辑对于每个循环迭代不断变化的k
是有意义的。
无限循环的另一个来源是inputvalue
,在某些情况下似乎卡住了返回0
,所以你需要稍微调整一下以防止无限循环。
此外,srand(time(NULL));
是初始化伪随机数生成器