特定のノード間のすべてのパスを返す関数を作成する必要があります。
connect :: Int -> Int-> [[(Int,Int)]]
Data.Graphライブラリは、グラフを作成するための便利な関数'buildG'を提供します。電話したら
let g = buildG (1,5) [(1,2),(2,3),(3,4),(4,5),(2,5)]
、
すべてのノードが彼の隣人にマップされている配列を取得します。例:
g!1 = [2]
g!2 = [3,5]
..
g!5 = []
リスト内包表記を使用してそれを実行しようとしましたが、haskellがあまり得意ではなく、修復できない入力エラーが発生します。
connect x y g
| x == y = []
| otherwise = [(x,z) | z <- (g!x), connect z y g]
現時点では、サイクルについて心配する必要はありません。これが私が欲しいものです:
connect 1 5 g = [[(1,2),(2,3),(3,4),(4,5)],[(1,2),(2,5)]]