我正在寻找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。
答案 0 :(得分:3)
如果缩进代码会有所帮助。
while
- 循环在for
- 循环内。它正在扫描当前列(r
)中的行(c
),直到找到一个正方形(b[r][c]
),其中值不是1
(无论这意味着什么,也许这意味着它是一个空方格。)
您无法阅读本文的事实突出了明智命名标识符的重要性以及不在代码中使用“幻数”的重要性。
推荐阅读:The Practice of Programming (Professional Computing) by Brian W. Kernighan and Rob Pike。
答案 1 :(得分:1)
外部for
正在递减c
。值c
正在索引数组元素。 While-loop
正在迭代二维数组中的头元素。只要[r][c]
处的数组元素不等于1,您就会继续检查。我在r
上看不到任何界限。