0

我正在研究 N 皇后问题的“愚蠢”解决方案,我对代码中的 while 循环感到困惑:

bool check(int b[8][8])
{

  for(int c = 7; c >= 0; c--)
  {
    int r = 0;
    while(b[r][c] != 1 ) //this is the while loop I was talking about
   {
    r++;
   } //end while loop

    for(int i = 1; i <= c; i++)
   {
    if(b[r][c-i] == 1)
        return false;
    else if ((r-i)>=0 && b[r-i][c-i] == 1)

        return false;
    else if ((r+i)<=7 && b[r+i][c-i] == 1)
        return false;
    }

  } 
return true;
} 

在 int main() 中,我有 8 个 for 循环,在最里面的循环中,我将板的整个第一行初始化为 1。然后我调用该函数,在调用该函数后,我将整个第一行重置为零。如果你们需要,我可以显示 int main。

4

2 回答 2

3

如果你缩进你的代码会有所帮助。

while-loop 在-loop内for。它正在扫描r当前列 ( ) 中的行 ( ),c直到找到b[r][c]值不存在的正方形 ( ) 1(无论如何,这可能意味着它是一个空正方形)。

您无法阅读此内容的事实突出了合理命名的标识符以及不在代码中使用“幻数”的重要性。

推荐阅读:Brian W. Kernighan 和 Rob Pike 的 The Practice of Programming (Professional Computing)

于 2013-02-13T01:20:19.223 回答
1

外在for递减c。该值c正在索引一个数组元素。这While-loop是迭代二维数组中的头元素。只要数组元素 at[r][c]不等于 1,就会继续检查。我没有看到任何边界检查r

于 2013-02-13T01:21:27.700 回答