在OnLisp的P.303上有一段广泛优先搜索的伪代码,如下所示。 对于下图,它将首先处理节点1,然后将节点2,3和4放入队列中,然后再次迭代地调用自身。 然后,它将继续处于队列开始处的节点4。这反过来会将节点7和8放入队列的开头,依此类推。
最后,它所经过的路径将是1-> 4-> 7-11-> 12-> 8-> 3-> 2-> 5-> 9-> 10 - > 6是深度优先搜索。 我错了吗?
(define (path node1 node2)
(bf-path node2 (list (list node1))))
(define (bf-path dest queue)
(if (null? queue)
'@
(let* ((path (car queue))
(node (car path)))
(if (eq? node dest)
(cdr (reverse path))
(bf-path dest
(append (cdr queue)
(map (lambda (n)
(cons n path))
(neighbors node))))))))
答案 0 :(得分:1)
广度优先搜索利用它将遍历的元素的先进先出队列。
它应该查看第一个节点(1)
,然后抓住它的子节点(2, 3, 4)
并按该顺序填充列表。现在查看列表中的第一个元素并抓住其子项(5, 6)
,并将它们添加到要查看(3, 4, 5, 6)
的事物列表的末尾。
仅在第一个元素上重复此操作。
3 -> (4, 5, 6)
4 -> (5, 6, 7, 8)
5 -> (6, 7, 8, 9, 10)
6 -> (7, 8 , 9, 10)
7 -> (8, 9, 10, 11, 12)
8 -> (9, 10, 11, 12)
9 -> (10, 11, 12)
10 -> (11, 12)
11 -> (12)
12 -> ()
首先进行操作,最后输出(循环播放最近添加的元素),然后创建深度优先搜索。