私はスキームで深さの最初の検索を実装しようとしていますが、部分的にしか機能しません。 これは私のコードです:プロシージャにスキームで深さの最初の検索を実装する際の問題
(depth-first-search complete-graph (caar complete-graph) (cdar complete-graph) (list (caar complete-graph)) 'd)
フルを返すshoud:
(define (depth-first-search graph node neighbour path dest)
(cond ((null? neighbour) #f)
((equal? node dest) path)
((member (car neighbour) path) (depth-first-search graph node (cdr neighbour) path dest))
((memq (car neighbour) (car graph)) (depth-first-search (cdr graph) (car neighbour) (memq (car neighbour) (car graph)) (append path (list (car neighbour))) dest))
(else depth-first-search (cdr graph) path dest)))
そして、これは私のグラフ、データ構造である:これは私がプロシージャを呼び出す方法です
(define complete-graph
'((a b c d e)
(b a c)
(c a b f)
(d a e h)
(e a d)
(f c g i)
(g f h i j)
(h d g j)
(i f g j)
(j g h i)))
始点ノードから終点(dest)(ination)までの経路がリストとして示されていますが、始点ノードと終点ノードでは動作しているようです。 'a'と 'c'で始まる場合、正しいリスト '(a b c)が返されますが、' a 'と' d 'を試してみると、#fが返されます。だから、おそらくアルゴリズムのバックトラッキングに何か問題があります。しかし、私はあまりにも長いコードを見てきましたが、実際には問題を見つけることはできません。
'else'節で' depth-first-search'を呼び出す前に括弧がありません。 –
'(追加パス(リスト(カーネイバー)))'は悪いことです。 – knivil