递归回溯解释

时间:2015-09-01 17:42:08

标签: c++ backtracking

我找到了N-queen拼图的源代码,我无法绕过它。我是递归函数的新手。如果有人可以为我简化这部分代码并解释它是如何落后的。我四处搜寻,无法弄明白。

void solve(int k)
{
    if (k == N) /// We placed N-1 queens (0 included), problem solved!
    {
        ///Solution found!
        cout << "Solution: ";
        for (int i = 0; i < N; i++)
            cout << position[i] << " ";
        cout << endl;
    }
    else
    {
        for (int i = 0; i < N; i++) /// Generate ALL combinations
        {
            /// Before putting a queen (the k-th queen) into a row, test it for safeness
            if (isSafe(k, i))
            {
                position[k] = i;
                /// Place another queen
                solve(k + 1);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

以下是算法的工作原理:

  1. 在棋盘上找到女王的下一个可用位置。把它放在那里。
  2. 重复步骤1直到A)您已成功放置k个皇后或B)没有有效的女王位置。
  3. 如果没有有效的展示位置,请返回您放置的上一篇文章并重复步骤1(即找到前一位女王的不同位置,然后重试)。
  4. 您可以清楚地看到回溯发生在第3步。如果您已达到死胡同,请继续修改上一篇文章的位置,直至找到有效的解决方案。