-1

这段代码应该产生一个已解出的数独矩阵,但是 while 语句将其置于无限循环中。删除 while 语句给了我一个矩阵,其中一些值仍然是 99 或 0。而且我不能一个一个地唯一地生成 9 个随机数。如果要运行并检查代码,请删除 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();
}
4

1 回答 1

2

您在这里使用 assignment =,而不是等于==

 while(a[i][k]=99||a[i][k]=0)
              ^           ^

这应该是:

 while(a[i][k]==99||a[i][k]==0)

a[i][k]=99将始终评估为非零,尽管您的原始代码不会按原样为我编译,true所以我怀疑您正在运行的代码有一些括号或略有不同。99gcc

在初始化之前在 while 循环中使用也是未定义的行为,并且不清楚您的终止逻辑对于每次循环迭代都不断变化的 ka 是否有意义。k

无限循环的另一个来源是在某些情况下inputvalue似乎会卡住返回0,因此您需要稍微调整一下以防止无限循环。

此外,srand(time(NULL));是一种更常见的初始化伪随机数生成器的方法

于 2013-07-24T11:58:00.410 回答