他の場所で入手して少し変更したBFSの実装がありますが、その入力に問題があります。
グラフを取り、'((abc)(bc)(cd))として受け取りますが、私が与えている入力は加重グラフです... BFSには役に立たないことはわかっていますが、加重を使用しています後でさらに下の行。この入力は、などの
ようになります。
'(
(a (b 3) (c 1))
(b (a 3) (d 1))
(c (a 1) (d2) (e 2))
)
私のコード:
(defun shortest-path (start end net)
(BFS end (list (list start)) net))
(defun BFS (end queue net)
(if (null queue)
nil
(expand-queue end (car queue) (cdr queue) net)))
(defun expand-queue (end path queue net)
(let ((node (car path)))
(if (eql node end)
(reverse path)
(BFS end
(append queue
(new-paths path node net))
net))))
(defun new-paths (path node net)
(mapcar #'(lambda (n)
(cons n path))
(cdr (assoc node net))))
新しいスタイルリストを受け入れるためにどこを変更する必要があるのか、またはヘルプ関数を作成して正しくフォーマットする必要があるのかがわかりません。