我需要构建一个函数,它返回某些节点之间的所有路径。
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)]]