温斯顿和霍恩在“Lisp”中的问题19-2,
深度优先搜索,所有
给定队列中的部分路径
搜索中的点与
以一种简单的方式相互交流:每一个都是
一个节点的扩展
队列中它后面的部分路径。
例如,队列可能会
这样地:
((D C B A) (C B A) (B A) (A))
不过,我不知道情况如何。例如,我得到输出
如下所示:
(depth-first 's 'f)
queue: ((S))
(S)
queue: ((A S) (D S))
(S A)
queue: ((B A S) (D A S) (D S))
(S A B)
queue: ((C B A S) (E B A S) (D A S) (D S))
(S A B C)
queue: ((E B A S) (D A S) (D S))
(S A B E)
queue: ((D E B A S) (F E B A S) (D A S) (D S))
(S A B E D)
queue: ((F E B A S) (D A S) (D S))
(S A B E F)
我在程序的开头放了一个打印语句:
(defun depth-first (start finish &optional
(queue (list (list start))))
(format t "~%queue: ~a" queue)
(cond ((endp queue) nil)
((eq finish (first (first queue)))
(reverse (first queue)))
(t (depth-first
start
finish
(append (extend (first queue))
(rest queue))))))
在这种情况下,队列中的任何部分路径都不是1的扩展名
队列中部分路径后面的节点。
这是练习中的印刷错误还是有输入错误?
真的给他排队吗?