【发布时间】:2021-08-25 13:04:44
【问题描述】:
这是我的代码
#include <iostream>
#include <vector>
using namespace std;
int k = 4;
vector<int> QLocation(k,0);
vector<vector<string> > board(k, vector<string>(k, "."));
bool check(int row, int column)
{
if (row == 0) return true;
for (int m = row - 1, n = 1; m >= 0; m--, n++)
{
if (board[m][column] == "Q") return false;
if (column + n < n && board[m][column + n] == "Q") return false;
if (column - n >= 0 && board[m][column - n] == "Q") return false;
}
return true;
}
void solve(int row, int column)
{
for (int i = row; i < k;i++)
{
for (int j = column; j < k; j++)
{
if (check(i, j))
{
board[i][j] = "Q";
QLocation[i] = j;
break;
}
else
board[i][j] = ".";
if (j == k - 1)
{
i -= 1;
j = QLocation[i];
}
}
}
}
int main()
{
solve(0, 0);
for (int i = 0; i < k; i++)
{
for (int j = 0; j < k; j++)
cout << board[i][j];
cout << endl;
}
}
输出是无限循环
我在第11、15、16、17、28行设置断点,逐步检查值变化
当i=2,j=1时,输入校验,当m=1,n=1,board[m][column + n] == "Q"但不返回false
为什么?
====== 2021/08/25 22:00 更新======
当我删除这些代码并且 k=4
if (j == k - 1)
{
i -= 1;
j = QLocation[i];
}
输出是
Q...
..Q.
.Q..
....
当k=8时输出为
Q.......
..Q.....
.Q......
.....Q..
.......Q
...Q....
........
....Q...
第三行总是失败,但其他行都正确
【问题讨论】:
-
+1 用于调试器。您能否指出问题出在哪一行(例如通过添加代码注释)?
-
是否应该将
if (j == k - 1)设置为.? -
column + n < n只有在column为负时才为真,但我看不到这种情况会发生。 -
@blackbrandt 在第 16 行 if (column + n
-
另外,你如何让
1 + 1 < 1为真?