【发布时间】:2017-01-30 22:50:47
【问题描述】:
我正在阅读 SICP 上 N-Queens 谜题的解决方案说明,但我无法理解其中的大部分内容。这是解决方案:
解决难题的一种方法是全面工作,放置一个 每一列的皇后。一旦我们放置了 k - 1 个皇后,我们必须放置 第 k 个皇后处于不检查任何皇后的位置 已经在板上了。我们可以递归地制定这种方法: 假设我们已经生成了所有可能的序列 将 k - 1 个皇后放在棋盘前 k - 1 列的方法。 对于这些方式中的每一种,通过以下方式生成一组扩展的位置 在第 k 列的每一行放置一个皇后。现在过滤这些, 只保留第 k 列中皇后所在的位置 相对于其他皇后来说是安全的。这产生了序列 在前 k 列中放置 k 个皇后的所有方法。通过继续这个 过程中,我们将产生的不仅是一种解决方案,而是所有解决方案 谜题。
假设一个 8 x 8 棋盘看起来像这样:我的眼睛被毁坏了,所以我不能使用图片。 0 表示没有女王,1 表示女王。
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
全面工作,在每列中放置一个女王。
我的理解是垂直读取列,水平读取行。文字是这样的意思吗?
1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0
0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 0
0 1 0 0 0 0 0 0
我在每列中放置了一个皇后,但没有指定行,但由于这是递归完成的,我假设我已经生成了两个皇后不相互检查的位置方式。
假设我们已经生成了所有可能的序列 将 k - 1 个皇后放在棋盘前 k - 1 列的方法。
假设 k = 1。所以 1-1 = 第 0 列有一种生成位置的方法,因为它是一个空板。
对于这些方式中的每一种,通过以下方式生成一组扩展的位置 在第 k 列的每一行放置一个皇后。
我对第 0 列的解决方案是 1 方式,但我完全不知道以下是什么意思。
通过在每一行放置一个皇后来生成一组扩展的位置 第 k 列。
“生成一组扩展的位置”并在列的每一行放置一个皇后是什么意思?如果k = 1是这样吗?
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
但是所有的皇后都不安全,因为它们都在同一列,对吧?
我完全不知道如何进行。谁能给我解释一下?
注意:如果您想给出视觉解释,请同时提供文字解释,因为我看不到图像和图片。谢谢
【问题讨论】:
标签: algorithm recursion sicp n-queens