【发布时间】:2011-12-09 18:25:33
【问题描述】:
我正在尝试实现一个返回 LIST 列表的函数(LIST 中的每个列表都是在列表中交换的两个元素的结果)。它应该根据每次交换形成的列表进行搜索。这是我解决 8 谜题的程序的一部分。这是我到目前为止所拥有的
(setq *LIST* nil)
(defun swapped_list(lst)
(loop for j in (positions_to_swap) do
(setq *LIST* (rotatef (nth pos lst) (nth j lst))
*LIST*)
(swapped_list '(11 12 13 14 15 16 17 18 19))
如果positions_to_swap 是(0 2 5) 并且pos 是4,这应该返回
((15 12 13 14 11 16 17 18 19) (11 12 15 14 13 16 17 18 19) (11 12 13 14 16 15 17 18 19))
我已经花费了无数个小时来尝试调试,但没有任何进展。我尝试了许多变体,但没有一个有效。
【问题讨论】:
-
你说的是8皇后问题吗?如果是这种情况,您将使其变得更加困难(提示:-1-您当然知道皇后必须在不同的行上,因此只需使用列号向量-2-有8个可用列在开始时,每次放置皇后时,您都可以从可用列列表中删除该列 -3- 只有 15 条直接对角线 (dd=x+y),您可以使用相同的逻辑 -4- 只有15 个对角线 (cd=x+8-y),你可以再次使用相同的逻辑...)