了解8皇后拼图的对角线搜索

时间:2017-07-18 11:44:05

标签: c++ c algorithm search

我正在解决8 queen问题并尝试通过互联网查看比较解决方案,以了解我的解决方案与其他解决方案的比较。我发现了一个非常小的蛮力解决方案让我很困惑。我想知道是否有人愿意解释对角线比较实际如何运作?

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)

根据我的理解,检查对角线,但我没有看到它。

1 个答案:

答案 0 :(得分:0)

由于第一个循环条件为j < col,因此该条件的右侧为正。 i对应于正在检查的当前行,hist[j]j列上的后置行。因此,这将检查两个点(hist[j], j)(i, col)是否位于&#34;正斜杠&#34; (/)或&#34;反斜杠&#34; (\),对角线,通过检查水平和垂直距离是否相等。 abs允许一次性检查两种情况。