Next: 7.3 縦型探索(depth-first search)
Up: 7 グラフ探索
Previous: 7.1 パスの表現
グラフの探索においては,探索中の現在いる頂点(
)をもとに,
に
隣接している頂点を調べる.そこで,探索プログラムで必要となるも
のとして,
から
までの path を与えて,
に隣接する頂点を求
めるという関数があげられる.この関数をnew-nodesと定義することにする.
次に,new-nodesで得られる頂点群へパスを伸ばして得られる新しいパス群を
作る関数をnew-pathsとして定義することにする.
まず,new-nodesによりpathの最後の頂点
を展開するためには,
(adjacency-list
graph) として,頂点のリストを返す
adjacency-list を用いる.
(defun new-nodes (path graph)
(new-nodes-aux
path
(adjacency-list (first path) graph)))
(defun new-nodes-aux (path nodes)
(cond
((null nodes) nil)
((node-member (car nodes) path)
(new-nodes-aux path (cdr nodes)))
(t (cons (car nodes)
(new-nodes-aux path (cdr nodes))))))
(defun new-paths (path graph)
(mapcar
#'(lambda (n) (cons n path))
(new-nodes path graph)))
new-nodesはpathをもらってpathの先頭の頂点(現在探索中の頂点)
の隣接点リストを取りだし,隣接点リストの各頂点のうちpathに
すでに含まれているものを取り除く.つまり,すでに通って来た
道にある頂点を除いた点のみを返す.
new-pathsは,pathをもらって,それを伸ばしてゆく新しいpathを
生成する.new-nodesを用いてそれにより増える頂点の数だけの
新しいpathのリストが返される.
> (new-nodes '(e d s) *graph1*)
(b f)
> (new-paths '(e d s) *graph1*)
((b e d s) (f e d s))
generated through LaTeX2HTML. M.Inaba 平成18年5月7日