了解 8 女王拼图的对角线搜索
Understanding diagonal search of 8 queen puzzle
我正在解决 8 女王问题,并试图通过互联网寻找比较解决方案,看看我的解决方案与其他解决方案相比如何。我发现了一个非常小的蛮力解决方案,让我感到困惑。我想知道是否有人愿意解释对角线比较的实际工作原理?
void solve(int n, int col, int *hist)
{
int i;
int j;
if (col == n)
{
print_solution(n, hist);
}
i = 0;
while (i < n)
{
j = 0;
while (j < col && !(hist[j] == i || abs(hist[j] - i) == col - j))
j++;
if (j < col)
{
i++;
continue;
}
hist[col] = i;
solve(n, col + 1, hist);
i++;
}
}
void main(void)
{
int hist[8];
solve(8, 0, hist);
}
I have
可视化问题特别相关的代码是:
abs(hist[j] - i) == col - j)
据我了解,它会检查对角线,但我看不到它。
因为第一个循环条件是j < col
,这个条件的右手边是正的。i
对应于正在检查的当前行,hist[j]
是第j
列上的女王行。因此,通过检查水平和垂直距离是否相等,这将检查两个(i, col)
(hist[j], j)
点是否位于对角线上的"正斜杠"(/(或"反斜杠"(\(上。abs
是允许一次性检查两种情况。
相关文章:
- 有根的二进制搜索树.保留与其父级的链接
- 在C++中搜索嵌套多映射值
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 二进制搜索树叶数问题
- 为什么二进制搜索在我的测试中不起作用
- 正在尝试重载二进制搜索树分配运算符
- c++binary_search函数排序数组(流行名称搜索)出现问题
- 向量上的线性搜索
- 如何在cuSparse中得到稀疏矩阵的对角线
- 如何在动态数组上使用搜索函数
- 如何打印数组对角线的一侧
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- cmake:添加要搜索头文件的目录
- 使用C++创建特殊的二叉搜索树
- 在C++的字符串中搜索和删除某些字符
- std::unordered_map 搜索算法是如何实现的?
- 使用不变量来确定二分搜索中的边界条件
- 二叉搜索如何比线性搜索更快?
- 按边长度递归搜索图中所有可行路径
- 了解 8 女王拼图的对角线搜索